int rt[M];
int cnt[M<<5];
int ch[M<<5][2];
int pre[M];
int tot=0;
int n,m;
void ins(int a,int b,int t,int x){
if(t<0)return;
int i = (x>>t)&1;
ch[a][!i]=ch[b][!i];
ch[a][i]=++tot;
cnt[ch[a][i]]=cnt[ch[b][i]]+1;
ins(ch[a][i],ch[b][i],t-1,x);
}
int qu(int a,int b,int t,int x){
if(t<0)return 0;
int i =(x>>t)&1;
if(cnt[ch[b][!i]]>cnt[ch[a][!i]]){
return (1ll<<t)+qu(ch[a][!i],ch[b][!i],t-1,x);
}else{
return qu(ch[a][i],ch[b][i],t-1,x);
}
}
void solve(){
cin>>n>>m;
rt[0]=++tot;
ins(rt[0],0,25,0);
for(int i=1;i<=n;i++){
int x;cin>>x;
pre[i]=pre[i-1]^x;
rt[i]=++tot;
ins(rt[i],rt[i-1],25,pre[i]);
}
rep(i,1,m){
char o;cin>>o;
if(o=='A'){
n++;
int x;cin>>x;
pre[n]=pre[n-1]^x;
rt[n]=++tot;
ins(rt[n],rt[n-1],25,pre[n]);
}else{
int l,r,k;cin>>l>>r>>k;
l--;r--;
if(i==0)cout<<qu(0,rt[r],25,k^pre[n]);
else cout<<qu(rt[l-1],rt[r],25,k^pre[n]);
cout<<endl;
}
}
}