//Dedicated to my love, ivaziva
#include "bits/stdc++.h"
#define dbg(x) cerr << #x << ": " << x << endl;
#define ll long long
#define pb push_back
#define all(a) a.begin(),a.end()
#define si(s) (ll)(s.size())
using namespace std;
#define maxn 100005

int n;
int a[maxn];
int ft1[maxn][30], ft2[maxn][30]; // fenw za prefiks, fenw za sufiks

void upd1(int i, int val, int bit) {
	while(i <= n) {
		ft1[i][bit] += val;
		i += i & (-i);
	}
}

int get1(int i, int bit) {
	int ans = 0;
	while(i > 0) {
		ans += ft1[i][bit];
		i -= i & (-i);
	}
	return ans;
}

void upd2(int i, int val, int bit) {
	while(i <= n) {
		ft2[i][bit] += val;
		i += i & (-i);
	}
}

int get2(int i, int bit) {
	int ans = 0;
	while(i > 0) {
		ans += ft2[i][bit];
		i -= i & (-i);
	}
	return ans;
}


int main(){
	ios_base::sync_with_stdio(false);
	cout.tie(0); cin.tie(0); cerr.tie(0);

    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
        for(int j = 0; j < 30; j++) {
            int x = ((a[i] & (1 << j)) > 0 ? 1 : 0);
            x ^= 1; // ovo je koliko njih u prefiksu treba taj bit uopste
            upd1(i, x, j);
        }
    }
    dbg(get1(2, 1));
    for(int i = 1; i <= n; i++) {
        for(int j = 0; j < 30; j++) {
            int x = ((a[i] & (1 << j)) > 0 ? 1 : 0);
            int nov_idx = n - i + 1;
            upd2(nov_idx, x, j);
        }
    }
    int q;
    cin >> q;
    while(q--) {
        int tp;
        cin >> tp;
        if(tp == 0) {
            int idx;
            cin >> idx;
            int p = a[idx];
            for(int i = 0; i < 30; i++) {
                int treba_pref = get1((idx - 1), i);
                int nov_idx = n - idx;
                int ima_suf = get2(nov_idx, i);
                if(p & (1 << i)) { // ako nema upaljen bit nece mu se oduzeti
                    if(treba_pref > ima_suf) p ^= (1 << i);
                } else {
                    if(treba_pref < ima_suf) p ^= (1 << i);
                }
            }
            cout << p << '\n';
        } else {
            int k, x;
            cin >> k >> x;
            int old_val = a[k];
            int nov_idx = n - k + 1;
            for(int i = 0; i < 30; i++) {
                bool up1 = ((old_val & (1 << i)) > 0 ? true : false);
                bool up2 = ((x & (1 << i) > 0) ? true : false);
                if(up1 && up2) {
                    continue;
                } else if(up1 && !up2) {
                    upd1(k, (-1), i);
                    upd2(nov_idx, (-1), i);
                } else if(!up1 && up2) {
                    upd1(k, 1, i);
                    upd2(nov_idx, 1, i);
                } else {
                    continue;
                }
            }
            a[k] = x;
        }
    }
	return 0;
}