#include <bits/stdc++.h>
#define ll long long
using namespace std;

int N, Q, A[100500], cnt, x, k, b, B[100500];

bool cmp(int a, int b) {return a > b;}

int main()
{
    scanf("%d", &N);
    for(int i = 1; i <= N; i++)
    {
        scanf("%lld", &A[i]);
        if(A[i])
            cnt++;
        B[i] = A[i];
    }
    for(int i = 1; i <= N; i++)
    {
        for(int j = 1; j <= N; j++)
        {
            if((B[i] | B[j]) > B[i])
            {
                int o = (B[i] | B[j]);
                int a = (B[i] & B[j]);
                B[i] = o;
                B[j] = a;
            }
        }
    }
    sort(B + 1, B + N + 1, cmp);
//    for(int i = 1; i <= N; i++)
//        printf("%d ", B[i]);
//    printf("\n");
    scanf("%d", &Q);
    while(Q--)
    {
        scanf("%d", &b);
        if(b)
        {
            scanf("%d %d", &k, &x);
            int idx;
            int idx2;
            for(int i = 1; i <= N; i++)
                if((B[i] & A[k]) == A[k])
                    idx = i;
            B[idx] = (B[idx] ^ A[k]);
            for(int i = 1; i <= N; i++)
                if((B[idx] & A[k]) == B[i])
                {
                    B[i] = x;
                    idx2 = i;
                }
            A[k] = x;
//            for(int i = 1; i <= N; i++)
//                printf("%d ", B[i]);
//            printf("\n");
            for(int i = 1; i <= N; i++)
                if((B[i] | B[idx2]) > B[i])
                {
                    int o = (B[idx2] | B[i]);
                    int a = (B[idx2] & B[i]);
                    B[i] = o;
                    B[idx2] = a;
                }
            sort(B + 1, B + N + 1, cmp);
        }
        else
        {
            scanf("%d", &k);
            printf("%d\n", B[k]);
        }
    }
    return 0;
}