#include<bits/stdc++.h>
using namespace std;
const int N=5e6+10,inf=2e9;
int n,m,op,x,rt,tot,lst,ans,f;
struct Splay{
int fa,tg,sz,vl,cnt,s[2];
}tr[N];
inline void rd(int &x){
x=0,f=0;
char ch=getchar();
while(ch>'9'||ch<'0') f|=(ch=='-'),ch=getchar();
while(ch<='9'&&ch>='0') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
if(f) x=-x;
}
inline void psu(int x){tr[x].sz=tr[tr[x].s[0]].sz+tr[tr[x].s[1]].sz+tr[x].cnt;}
inline int find(int k){
int x=rt;
while(tr[x].vl!=k) x=tr[x].s[tr[x].vl<k];
return x;
}
inline void rot(int x){
int y=tr[x].fa,z=tr[y].fa,k=(x==tr[y].s[0]);
tr[z].s[y==tr[z].s[1]]=x,tr[x].fa=z;
tr[y].s[!k]=tr[x].s[k],tr[tr[x].s[k]].fa=y;
tr[x].s[k]=y,tr[y].fa=x;
psu(y),psu(x);
}
inline void spl(int x,int k){
while(tr[x].fa!=k){
int y=tr[x].fa,z=tr[y].fa;
if(z!=k) rot((tr[y].s[1]==x)^(tr[z].s[1]==y)?x:y);
rot(x);
}
if(!k) rt=x;
}
inline int nw(int x,int fa){
tr[++tot].vl=x,tr[tot].cnt=tr[tot].sz=1,tr[tot].fa=fa;
return tot;
}
inline void bld(){
rt=nw(-inf,0);
tr[rt].s[1]=nw(inf,1);
psu(rt);
}
inline void ins(int k){
int x=rt,fa=0;
while(x){
if(tr[x].vl==k) return ++tr[x].cnt,spl(x,0),void();
fa=x,x=tr[x].s[tr[x].vl<k];
}
tr[fa].s[tr[fa].vl<k]=x=nw(k,fa),spl(x,0);
}
inline int kth(int x,int k){
if(tr[tr[x].s[0]].sz>=k) return kth(tr[x].s[0],k);
if(k-tr[tr[x].s[0]].sz<=tr[x].cnt) return tr[x].vl;
return kth(tr[x].s[1],k-tr[tr[x].s[0]].sz-tr[x].cnt);
}
inline int rnk(int k){
spl(find(k),0);
return tr[tr[rt].s[0]].sz;
}
inline int pre(int x){
spl(find(x),0),x=tr[rt].s[0];
while(tr[x].s[1]) x=tr[x].s[1];
return x;
}
inline int nxt(int x){
spl(find(x),0),x=tr[rt].s[1];
while(tr[x].s[0]) x=tr[x].s[0];
return x;
}
inline void del(int k){
int pv=pre(k),nt=nxt(k);
spl(pv,0),spl(nt,rt);
int x=tr[tr[rt].s[1]].s[0];
if(tr[x].cnt>1) --tr[x].cnt,psu(x);
else tr[tr[rt].s[1]].s[0]=0;
psu(tr[rt].s[1]),psu(rt);
}
int main(){
bld();
cin>>n>>m;
while(n--) rd(x),ins(x);
while(m--){
rd(op),rd(x); x^=lst;
if(op==1) ins(x);
else if(op==2) del(x);
else{
if(op==3) ins(x),lst=rnk(x),del(x);
else if(op==4) lst=kth(rt,x+1);
else if(op==5) ins(x),lst=tr[pre(x)].vl,del(x);
else ins(x),lst=tr[nxt(x)].vl,del(x);
ans^=lst;
}
}
cout<<ans;
return 0;
}