#include <bits/stdc++.h>
#define int long long
#define x first
#define y second
using namespace std;
const int N=6e5+10,M=N*25;
int ne[M][2],h[N],idx,s[N],mid[M];
void insert(int i,int k,int p,int u)
{
mid[u]=i;
if(k<0)return;
int v=s[i]>>k&1;
ne[u][v]=++idx;
if(p)ne[u][v^1]=ne[p][v^1];
insert(i,k-1,ne[p][v],ne[u][v]);
};
int query(int l,int r,int x)
{
int p=h[r-1];
for(int i=23;~i;i--)
{
int v=x>>i&1;
if(mid[ne[p][v^1]]>=l-1)p=ne[p][v^1];
else p=ne[p][v];
}
return s[mid[p]]^x;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
memset(mid,-1,sizeof mid);
h[0]=++idx;
insert(0,23,0,h[0]);
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
s[i]=s[i-1]^x;
h[i]=++idx;
insert(i,23,h[i-1],h[i]);
}
for(int i=1;i<=m;i++)
{
char op;
cin>>op;
if(op=='A')
{
int x;
cin>>x;
h[++n]=++idx;
s[n]=s[n-1]^x;
insert(n,23,h[n-1],h[n]);
}
if(op=='Q')
{
int l,r,x;
cin>>l>>r>>x;
cout<<query(l,r,s[n]^x)<<endl;
}
}
return 0;
}