#include <bits/stdc++.h>

using namespace std;

unordered_map<int,set<int,greater<int>>>poslednja;
unordered_map<int,set<int>>korist;
map<int,int,greater<int>>mp,pom;

int res[100010];
int niz[100010];

void build(){
    pom=mp;
    int cnt=0;
    for(auto i:pom){
        while(i.second--){
            int br1=i.first;
            pom[br1]--;
            for(auto j:pom){
                int br2=j.first;
                if(pom[br2]==0)continue;
                if((br1|br2)>br1){
                    pom[br1&br2]++;
                    pom[br2]--;
                    korist[br2].insert(i.first);
                    br1|=br2;
                }
            }
            poslednja[br1].insert(cnt);
            res[cnt++]=br1;
            //cerr<<res[cnt-1]<<endl;
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>niz[i];
        mp[niz[i]]++;
    }
    build();
    int q;
    cin>>q;
    bool prom=0;
    while(q--){
        int c;
        cin>>c;
        if(c==0){
            if(prom){
                prom=0;
                build();
            }
            int k;
            cin>>k;
            cout<<res[k-1]<<endl;
        }
        else{
            int k,x;
            cin>>k>>x;
            mp[niz[k-1]]--;
            mp[x]++;
            niz[k-1]=x;
            prom=1;
            /*
            int br=*korist[niz[k-1]].begin();
            int ind=*poslednja[br].begin();
            res[ind]^=niz[k-1];
            */
        }
    }
    return 0;
}