#include <bits/stdc++.h>
using namespace std;
int N, Q, Ti, Ki, Xi, A[100005], P[100005];

void Konstrukcija(){
	for(int i = 1; i <= N; i++)
		P[i] = 0;
	
	for(int i = 1; i <= N; i++){
		for(int j = 1; j <= N; j++){
			int tempOR = P[j] | A[i];
			int tempAND = P[j] & A[i];
			if(P[j] != tempOR){
			P[j] = tempOR;
			if(!tempAND)
			break;
			}
		}
	}
}

void Izmena(int Ki, int Xi){
	int temp1 = 5 xor 5;
	cout << "TEMP1 : " << temp1 << endl;
	int temp = A[Ki] xor Xi;
	if(A[Ki] < Xi){
		for(int j = 1; j <= N; j++){
			int tempOR = temp | P[j];
			int tempAND = temp & P[j];
			if(P[j] != tempOR){
			P[j] = tempOR;
			if(!tempAND)
			break;
			}
		}
	}
	if(A[Ki] > Xi){
		for(int j = N; j >= 1; j--){
			int tempAND = temp & P[j];
			if(P[j] != P[j] - tempAND){
				P[j] -= tempAND;
				temp -= tempAND;
				if(!temp)
				break;
			}
		}
	}
	
}

int main(){
	scanf("%d", &N);
	for(int i = 1; i <= N; i++){
		scanf("%d", &A[i]);
	}
	Konstrukcija();
	scanf("%d", &Q);

	for(int i = 1; i <= Q; i++){
		scanf("%d", &Ti);
		if(Ti){
			scanf("%d %d", &Ki, &Xi);
			Izmena(Ki, Xi);
		}else{
			scanf("%d", &Ki);
			printf("%d\n", P[Ki]);
		}
	}
	
	return 0;
}