#include<iostream>
#include<algorithm>
#define N 1100006
#define inf 0x7fffffff
using namespace std;
struct SplayTree{
int s[2],fa;
int value,cnt,sz;
void init(int p,int v){fa=p;value=v;cnt=sz=1;}
}tr[N];
int root,tot;
inline void pushup(int p){
int ls=tr[p].s[0],rs=tr[p].s[1];
tr[p].sz=tr[ls].sz+tr[rs].sz+tr[p].cnt;
}
inline void rotate(int x){
int y=tr[x].fa,z=tr[y].fa;
bool ys=(tr[y].s[1]==x),zs=(tr[z].s[1]==y);
int &subx=tr[x].s[ys^1];
tr[z].s[zs]=x;tr[x].fa=z;
tr[y].s[ys]=subx;if(subx)tr[subx].fa=y;
subx=y;tr[y].fa=x;
pushup(y),pushup(x);
}
inline void splay(int x,int k){
while(tr[x].fa!=k){
int y=tr[x].fa,z=tr[y].fa;
bool ys=(tr[y].s[1]==x),zs=(tr[z].s[1]==y);
if(z!=k) (ys^zs)?rotate(x):rotate(y);
rotate(x);
}
if(!k) root=x;
}
inline void ins(int v){
int x=root,fa=0;
while(x&&tr[x].value!=v){
fa=x;x=tr[x].s[v>tr[x].value];
}
if(x) tr[x].cnt++;
else {
tot++;x=tot;
if(fa) tr[fa].s[v>tr[fa].value]=x;
tr[x].init(fa,v);
}
splay(x,0);
}
inline void del(int v){
int x=root;
while(x&&tr[x].value!=v){
x=tr[x].s[v>tr[x].value];
}
if(!x) return;
splay(x,0);
if(tr[x].cnt>1){
tr[x].cnt--;
pushup(x);
return;
}
int left=tr[x].s[0],right=tr[x].s[1];
if(left) tr[left].fa=0;
if(right) tr[right].fa=0;
if(!left && !right) root=0;
else if(!left) root=right;
else if(!right) root=left;
else {
int y=left;
while(tr[y].s[1]) y=tr[y].s[1];
splay(y,0);
tr[y].s[1]=right;
tr[right].fa=y;
pushup(y);
root=y;
}
}
inline int getrank(int v){
int x=root,res=0;
while(x){
if(tr[x].value<v){
res+=tr[tr[x].s[0]].sz+tr[x].cnt;
x=tr[x].s[1];
}else x=tr[x].s[0];
}
return res;
}
inline int getkthvalue(int k){
int x=root;
while(x){
int y=tr[x].s[0];
if(tr[y].sz+tr[x].cnt<k){
k-=tr[y].sz+tr[x].cnt;
x=tr[x].s[1];
}else if(tr[y].sz>=k) x=tr[x].s[0];
else break;
}
if(x) splay(x,0);
return tr[x].value;
}
inline int getpre(int v){
int x=root,pre=-1;
while(x){
if(tr[x].value<v){
pre=x;
x=tr[x].s[1];
}else x=tr[x].s[0];
}
if(pre!=-1) splay(pre,0);
return tr[pre].value;
}
inline int getsuc(int v){
int x=root,suc=-1;
while(x){
if(tr[x].value>v){
suc=x;
x=tr[x].s[0];
}else x=tr[x].s[1];
}
if(suc!=-1) splay(suc,0);
return tr[suc].value;
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);std::cout.tie(0);
int n,m;cin>>n>>m;
ins(-inf);ins(inf);
for(int i=1;i<=n;i++){
int t;cin>>t;ins(t);
}
int last=0,ans=0;
for(int i=1;i<=m;i++){
int op,x;cin>>op>>x;
x^=last;
switch(op){
case 1:{ins(x);break;}
case 2:{del(x);break;}
case 3:{
last=getrank(x);ans^=last;
break;
}
case 4:{
last=getkthvalue(x+1);ans^=last;
break;
}
case 5:{
last=getpre(x);ans^=last;
break;
}
case 6:{
last=getsuc(x);ans^=last;
break;
}
}
}
cout<<ans<<"\n";
return 0;
}