#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int h[N],sum[N],tot,sz[N],v[N],ls[N],rs[N],n,m,root,hm[N];
bool lazy[N];
void szup(int x){
sz[x]=sz[ls[x]]+sz[rs[x]]+1;
}
int hb(int l,int r){
if(!l || !r) return l+r;
if(h[l]<h[r]){
rs[l]=hb(rs[l],r);
szup(l);
return l;
}
else{
ls[r]=hb(l,ls[r]);
szup(r);
return r;
}
}
void jd(int x){
tot++;
v[tot]=x;
h[tot]=rand();
sz[tot]=1;
hm[x]=tot;
szup(tot);
root=hb(root,tot);
}
void fl(int rt,int &l,int &r,int x){
if(!rt){
l=r=0;
return ;
}
int s=sz[ls[rt]]+1;
if(s<=x){
l=rt;
fl(rs[rt],rs[l],r,x-s);
szup(l);
}
else{
r=rt;
fl(ls[rt],l,ls[r],x);
szup(r);
}
}
void ffl(int rt,int &l,int &r,int x){
if(!rt){
l=r=0;
return ;
}
if(v[rt]<=x){
l=rt;
fl(rs[rt],rs[l],r,x);
szup(l);
}
else{
r=rt;
fl(ls[rt],l,ls[r],x);
szup(r);
}
}
int gpm(int x){
int l,r;
ffl(root,l,r,x-1);
int ans=sz[l]+1;
hb(l,r);
return ans;
}
void sm(int x){
x=gpm(hm[x]);
int l,r,me;
fl(root,l,r,x);
fl(l,l,me,x-1);
root=hb(hb(r,l),me);
}
void xm(int x){
x=gpm(hm[x]);
int l,r,me;
fl(root,l,r,x);
fl(l,l,me,x-1);
root=hb(hb(l,me),r);
}
void inst(int x,int t){
x=gpm(hm[x]);
int l,r,a,b;
fl(root,l,r,x-1);
fl(r,r,a,1);
if(t<0){
fl(l,l,b,x-2);
root=hb(hb(hb(l,r),b),a);
}else{
fl(a,a,b,1);
root=hb(hb(hb(l,a),r),b);
}
}
int gs(int x){
int l,r,me;
x=gpm(hm[x]);
fl(root,l,r,x-1);
fl(r,me,r,x);
int ans=me;
root=hb(l,hb(r,me));
return ans;
}
int pm(int x){
int l,r,me;
ffl(root,l,r,x-1);
fl(r,me,r,1);
int ans=me;
root=hb(l,hb(r,me));
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int k;
cin>>k;
jd(k);
}
while(m--){
string op;
int s,t;
cin>>op>>s;
if(op[0]=='T') sm(s);
if(op[0]=='B') xm(s);
if(op[0]=='I'){
cin>>t;
inst(s,t);
}
if(op[0]=='A') cout<<pm(s)<<endl;
if(op[0]=='Q') cout<<gs(s)<<endl;
}
return 0;
}