#include<bits/stdc++.h>
using namespace std;
#define MAXN 2100004
#define get(a) a=getint()
int getint()
{
int sign=1,s=0;
char ch=getchar();
while(!(isdigit(ch)||ch=='-'))ch=getchar();
if(ch=='-')
{
sign=-1;
ch=getchar();
}
while(isdigit(ch))
{
s=s*10+ch-'0';
ch=getchar();
}
return s*sign;
}
const int INF=INT_MAX;
struct fhq_treap
{
int root,tot,ch[MAXN][2],siz[MAXN],val[MAXN],dat[MAXN];
int New(int value)
{
++tot;
siz[tot]=1;
val[tot]=value;
dat[tot]=rand();
return tot;
}
fhq_treap()
{
New(INF);
New(-INF);
ch[1][0]=2;
root=1;
}
void update(int o)
{
siz[o]=siz[ch[o][0]]+siz[ch[o][1]]+1;
}
void split(int &x,int &y,int now,int k)
{
if(!now)x=y=0;
else
{
if(val[now]<=k)
x=now,split(ch[now][1],y,ch[now][1],k);
else y=now,split(x,ch[now][0],ch[now][0],k);
update(now);
}
}
int merge(int x,int y)
{
if(!x)return y;
if(!y)return x;
if(dat[x]<dat[y])
{
ch[x][1]=merge(ch[x][1],y);
update(x);
return x;
}
else
{
ch[y][0]=merge(x,ch[y][0]);
update(y);
return y;
}
}
void insert(int o)
{
int t=New(o),x,y;
split(x,y,root,o);
root=merge(merge(x,t),y);
}
void del(int o)
{
int x,y,z;
split(x,y,root,o);
split(x,z,x,o-1);
z=merge(ch[z][0],ch[z][1]);
root=merge(merge(x,z),y);
}
int rank(int o)
{
int x,y;
split(x,y,root,o-1);
int t=siz[x]+1;
root=merge(x,y);
return t;
}
int kth(int now,int k)
{
while(1)
{
if(k<=siz[ch[now][0]])now=ch[now][0];
else if(k==siz[ch[now][0]]+1)
return val[now];
else k-=siz[ch[now][0]]+1,now=ch[now][1];
}
}
int pre(int o)
{
int x,y,t;
split(x,y,root,o-1);
t=kth(x,siz[x]);
root=merge(x,y);
return t;
}
int next(int o)
{
int x,y,t;
split(x,y,root,o);
t=kth(y,1);
root=merge(x,y);
return t;
}
void dfs(int now)
{
if(now==0)return;
dfs(ch[now][0]);
printf("#%d",val[now]);
dfs(ch[now][1]);
}
void test()
{
dfs(root);
}
}tree;
int n,last,m,ans;
int main()
{
srand(time(0));
get(n);get(m);
for(int i=1;i<=n;++i)
{
int p=getint();
tree.insert(p);
}
for(int i=1;i<=m;++i)
{
int opt=getint(),o=getint();
if(opt==1)
tree.insert(o);
else if(opt==2)tree.del(o);
else if(opt==3){o^=last,last=tree.rank(o)-1,ans^=last;}
else if(opt==4){o^=last,last=tree.kth(tree.root,o+1),ans^=last;}
else if(opt==5){o^=last,last=tree.pre(o),ans^=last;}
else{o^=last,last=tree.next(o),ans^=last;}
}
printf("%d",ans);
return 0;
}