#include<bits/stdc++.h>
#define px first
#define py second
#define mkp make_pair
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ostream_iterator<ll> output(cout," ");
const int N=100005,V=1e7+5;
//const int MOD=;
typedef pair<int,int> P;
template<typename T>
class Trie01{
struct Node{
int son[2],sum;
Node(){sum=son[0]=son[1]=0;}
};
vector<Node> a;
int n;
static const int rt=1;
public:
Trie01(int si): n(si-1),a(2){}
/*void print(){
for(int i=0;i<a.size();i++)
fprintf(stderr,"a[%d]={%d,%d,%d}\n",i,a[i].son[0],a[i].son[1],a[i].sum);
}*/
void insert(const T& x,const int& v=1){
int num=rt;
for(int i=n,cur;i>=0;i--){
a[num].sum+=v;
cur=x>>i&1;
if(!a[num].son[cur]) a.emplace_back(),a[num].son[cur]=a.size()-1;
num=a[num].son[cur];
}
a[num].sum+=v;
}
void erase(const T& x){insert(x,-1);}
int depth() const{return n+1;}
int size() const{return a[rt].sum;}
void clear(){a.clear();a.emplace_back();}
int count(const T& x){
int num=rt;
for(int i=n,cur;i>=0;i--){
cur=x>>i&1;
num=a[num].son[cur];
if(!num) return 0;
}
return a[num].sum;
}
int rank(const T& x){
int ans=1;
for(int i=n,num=rt;i>=0;i--){
if(x>>i&1) ans+=a[a[num].son[0]].sum,num=a[num].son[1];
else num=a[num].son[0];
if(!num) break;
}
return ans;
}
T nth_element(int k){
T ans=0;
for(int i=n,num=rt;i>=0;i--)
if(a[a[num].son[0]].sum>=k) num=a[num].son[0];
else ans|=(1<<i),k-=a[a[num].son[0]].sum,num=a[num].son[1];
return ans;
}
T lower_bound(const T& x){return nth_element(rank(x));}
T upper_bound(const T& x){return nth_element(rank(x)-1);}
};
Trie01<int> a(30);
int n,m,ans;
signed main(){
/*a.insert(3),a.insert(5),a.insert(3),a.insert(7,3),a.print();
cerr<<a.count(3)<<" "<<a.count(2)<<" "<<a.count(7)<<" "<<a.count(1)<<endl;
for(int i=0;i<=8;i++) cerr<<a.rank(i)<<" \n"[i==8];
for(int i=0;i<=8;i++) cerr<<a.nth_element(i)<<" \n"[i==8];*/
scanf("%d%d",&n,&m);
for(int i=1,t;i<=n;i++) scanf("%d",&t),a.insert(t);
for(int i=1,op,x,lst=0;i<=m;i++){
scanf("%d%d",&op,&x);
x^=lst;
if(op==1) a.insert(x);
if(op==2) a.erase(x);
if(op==3) lst=a.rank(x);
if(op==4) lst=a.nth_element(x);
if(op==5) lst=a.nth_element(a.rank(x)-1);
if(op==6) lst=a.nth_element(a.rank(x+1));
if(op>=3) ans^=lst;
}
printf("%d",ans);
/*for(int i=1;i<=7;i++) cerr<<a.nth_element(i)-V<<" \n"[i==7];
cerr<<a.rank(493598+V)<<endl;*/
return 0;
}
弱化版能过