#include<bits/stdc++.h>
using namespace std;
int n,m,tr[13600010][2],end[13600010],s[600010],rt[600010],tot;
char t[5];
void insert(int i,int k,int p,int r){
if(k<0){
end[r]=i;
return;
}
int c=s[i]>>k&1;
if(p)tr[r][c^1]=tr[p][c^1];
tr[r][c]=++tot;
insert(i,k-1,tr[p][c],tr[r][c]);
end[r]=max(end[tr[r][0]],end[tr[r][1]]);
return;
}
int query(int i,int v,int k,int lim){
if(k<0)return s[end[i]]^v;
int c=v>>k&1;
if(end[tr[i][c^1]]>=lim)return query(tr[i][c^1],v,k-1,lim);
return query(tr[i][c],v,k-1,lim);
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
cin>>n>>m;
end[0]=-1;
rt[0]=++tot;
insert(0,23,0,rt[0]);
for(int i=1,p;i<=n;i++){
cin>>p;
s[i]=s[i-1]^p;
rt[i]=++tot;
insert(i,23,rt[i-1],rt[i]);
}
for(int i=1,l,r,p;i<=m;i++){
cin>>t;
if(t[0]=='A'){
cin>>p;
rt[++n]=++tot;
s[n]=s[n-1]^p;
insert(n,23,rt[n-1],rt[n]);
}else{
cin>>l>>r>>p;
cout<<query(rt[r-1],p^s[n],23,l-1)<<'\n';
}
}
return 0;
}