#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a,l,r,sum;
int h[600005];
int rt[600005],son[32000005][2],size[32000005],dcnt,rt_cnt;
void insert(int a,int pre,int now){
rt[now]=++dcnt;
int pre_x=rt[pre],now_x=rt[now];
for(int i=25;i>=1;i--){
int op=(a&(1<<(i-1)));
size[now_x]=size[pre_x]+1;
son[now_x][op]=++dcnt;
son[now_x][!op]=son[pre_x][!op];
pre_x=son[pre_x][op];
now_x=son[now_x][op];
}
size[now_x]=size[pre_x]+1;
}
int query(int l,int r,int a){
int l_x=rt[l],r_x=rt[r],ans=0;
for(int i=25;i>=1;i--){
int op=(a&(1<<(i-1)));
if(size[son[r_x][!op]]-size[son[l_x][!op]]>0){
l_x=son[l_x][!op];
r_x=son[r_x][!op];
ans|=(1<<(i-1));
}else{
l_x=son[l_x][op];
r_x=son[r_x][op];
}
}
return ans;
}
char op;
signed main(){
cin>>n>>m;
insert(0,rt_cnt,++rt_cnt);
for(int i=1;i<=n;i++){
cin>>h[i];
sum^=h[i];
insert(sum,rt_cnt,++rt_cnt);
}
for(int i=1;i<=m;i++){
cin>>op;
if(op=='A'){
cin>>a;
sum^=a;
insert(sum,rt_cnt,++rt_cnt);
}else{
cin>>l>>r>>a;
cout<<query(l-1,r,a^sum)<<'\n';
}
}
return 0;
}