#include<bits/stdc++.h>
#define edp (x>>i)&1
const int N=11451481;
int n,m,a[N],s[N],rt[N],cnt,tr[N][2],ed[N];
void insert(int p,int q,int x,int len){
for(int i=len;i>=0;i--){
if(p)tr[q][0]=tr[p][0],tr[q][1]=tr[p][1];
cnt=-~cnt;
tr[q][edp]=cnt;
p=tr[p][edp],q=tr[q][edp];
}
ed[q]=x;
}
int query(int p,int x,int l,int r){
for(int i=23;i>=0;i--){
if(tr[p][edp^1]!=0&&(tr[p][edp^1]-tr[p][edp^1]%23)/23>=l-1)p=tr[p][edp^1];
else p=tr[p][edp];
}
return ed[p]^x;
}
int main(){
std::cin>>n>>m;
rt[0]=1;
insert(0,1,0,23);
ed[0]=-1;
for(int i=1;i<=n;i=-~i){
std::cin>>a[i];
s[i]=s[i-1]^a[i];
rt[i]=++cnt;
insert(rt[i-1],rt[i],s[i],23);
}
while(m--){
char opt;
std::cin>>opt;
if(opt=='A'){
int x;
std::cin>>x;
n=-~n;
s[n]=s[n-1]^x;
rt[n]=++cnt;
insert(rt[n-1],rt[n],s[n],23);
}
else{
int l,r,x;
std::cin>>l>>r>>x;
std::cout<<query(rt[r-1],s[n]^x,l,r)<<std::endl;
}
}
}