#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int siz[1000005],cnt[1000005],val[1000005],dat[1000005];
int ch[1000005][2];
int tot,root;
inline int New(int v){
cnt[++tot]=1;
siz[tot]=1;
val[tot]=v;
dat[tot]=rand();
return tot;
}
inline void pushup(int id){
siz[id]=siz[ch[id][0]]+siz[ch[id][1]]+cnt[id];
}
inline void build(){
root=New(-0x3f3f3f3f3f3f3f3f);
ch[root][1]=New(0x3f3f3f3f3f3f3f3f);
pushup(root);
}
inline void Rotate(int &id,int d){
int temp=ch[id][d^1];
ch[id][d^1]=ch[temp][d];
ch[temp][d]=id;
id=temp;
pushup(ch[id][d]);
pushup(id);
}
inline void insert(int &id,int v){
if(!id){
id=New(v);
return;
}
if(val[id]==v){
cnt[id]++;
}
else{
int d=v<val[id]?0:1;
insert(ch[id][d],v);
if(dat[id]<dat[ch[id][d]]){
Rotate(id,d^1);
}
}
pushup(id);
}
inline void del(int &id,int v){
if(!id)return;
if(val[id]==v){
if(cnt[id]>1){
cnt[id]--;
}
else if(ch[id][0]||ch[id][1]){
if(!ch[id][1]||dat[ch[id][0]]>dat[ch[id][1]]){
Rotate(id,1);
del(ch[id][1],v);
}
else{
Rotate(id,0);
del(ch[id][0],v);
}
}
else{
id=0;
return;
}
}
else{
int d=v<val[id]?0:1;
del(ch[id][d],v);
}
pushup(id);
}
inline int getrank(int id,int v){
if(!id)return 1;
if(v==val[id])return siz[ch[id][0]]+1;
if(v<val[id])return getrank(ch[id][0],v);
if(v>val[id])return getrank(ch[id][1],v)+siz[ch[id][0]]+cnt[id];
}
inline int getnum(int id,int rank){
if(!id){
// cout<<"SDFJKLFSD\n";
return 0x3f3f3f3f3f3f3f3f;
}
if(rank<=siz[ch[id][0]])return getnum(ch[id][0],rank);
else if(rank<=siz[ch[id][0]]+cnt[id])return val[id];
else return getnum(ch[id][1],rank-siz[ch[id][0]]-cnt[id]);
}
inline int getpre(int v){
int id=root,pre;
while(id){
if(val[id]<v){
pre=val[id];
id=ch[id][1];
}
else{
id=ch[id][0];
}
}
return pre;
}
inline int getnext(int v){
int id=root,next;
while(id){
if(val[id]>v){
next=val[id];
id=ch[id][0];
}
else{
id=ch[id][1];
}
}
return next;
}
signed main(){
ios::sync_with_stdio(false);
srand(time(NULL));
cin>>n>>m;
for(int i=1;i<=n;i++){
int x;
cin>>x;
insert(root,x);
}
int last=0,ans=0;
while(m--){
int op,x;
cin>>op>>x;
x^=last;
// cout<<op<<" "<<x<<" "<<last<<"|\n";
int tt=-1;
if(op==1){
insert(root,x);
}
else if(op==2){
del(root,x);
}
else if(op==3){
tt=getrank(root,x)-1;
}
else if(op==4){
tt=getnum(root,x+1);
}
else if(op==5){
tt=getpre(x);
}
else{
tt=getnext(x);
}
if(tt!=-1)ans^=tt;
if(tt!=-1)last=tt;
}
cout<<ans;
return 0;
}