/*Da li se može detaljnije opisati operacija T=1 ako je vec element na poziciji k_i == X_i

? ??? ??????? ?? ??? ?? ????. n0sk1ll   13:35:43 13.04.
Zašto se onda u 2. test primeru zadatka promenila vrednosts, ako je vrednost elementa na poziciji 4 jednaka 0 Ogiblade   13:37:18 13.04.
?? 4. ???????? ?? ??????? ???????? 2. ??????? ????? ?? 1. n0sk1ll   13:38:20 13.04.
Dakle ako se desi T=1 operacija, ceo niz K se racuna ispocetka, sa promenjenim elementom niza A? Ogiblade   13:45:25 13.04.
????? ?? ????????? ??? ? ?????. ??? ??????? ?? ??????. n0sk1ll   13:46:22 13.04.
Pre T=1 operacije niz je 4, 2, 10, 0, 0. na poziciji 4 je element 0. Ogiblade   13:47:57 13.04.
Bez komentara n0sk1ll  
**??????? ???? 0 ?? ?????? ???. ??????? ?? ??????? ?? ?????????????? ??????? ???, ??? ?? ??? ??? ????????? ???? ????????? ???? 1 . ** U tekstu je zapisano da se niz iskljucivo menja komandama tipa 1, dok se u oba test primera odmah nakon unosa formira leksikografski sortitran niz sa vec primenjenim funkcijama. Ogiblade   14:07:17 13.04. */



#include<bits/stdc++.h>
using namespace std;
int main(){
    int n, q, x, kom;
    cin>>n;
    vector<int> a;
    vector<int> k;
    for(int i=0; i<n; i++){
        cin>>x;
        a.push_back(x);
    }
    sort(a.rbegin(), a.rend());
    for(int i=0; i<n-1; i++){
        if(a[i]==0) break;
        for(int j=i+1; j<n; j++){
            if(a[j]==0){j=n;}
            else if(a[i]<(a[i]|a[j])){
                x= a[i];
                a[i] = (a[i]|a[j]);
                a[j] = (x & a[j]);
            }
        }
    }
    sort(a.rbegin(), a.rend());
    for(int i=0; i<n; i++){
        x=a[i];
        k.push_back(x);

    }

    cin>>q;
    int i, j;
    for(int w=0; w<q; w++){
        cin>>kom;
        if(kom==0){
            cin>>i;
            i--;
            cout<<k[i]<<endl;
        }
        else{
            cin>>i>>x;
            if(k[i]!=x){
                k[i]=x;
                 for(i=0; i<n-1; i++){
                if(a[i]==0) break;
                 for(j=i+1; j<n; j++){
                    if(k[j]==0){j=n;}
                    else if(k[i]<(k[i]|k[j])){
                x= k[i];
                k[i] = (k[i]|k[j]);
                k[j] = (x & k[j]);
            }
        }
    }
            }
        }


    }
    cout<<endl;

}