var
i,j,k,l,y,n,m,ls,rs,cnt:longint;
t:array[0..500000,-2..2]of longint;
wz,bh:array[0..250000]of longint;
ch,ch2:char;
procedure build(l,r,fa:longint);
var x:longint;
begin
inc(cnt); x:=cnt; t[x,1]:=l; t[x,2]:=r;
if t[x,1]=t[fa,1] then t[fa,-1]:=x else t[fa,-2]:=x;
if l=r then
begin
if bh[l]>0 then t[x,0]:=1;
exit;
end;
build(l,(l+r)div 2,x); build((l+r)div 2+1,r,x);
t[x,0]:=t[t[x,-1],0]+t[t[x,-2],0];
end;
procedure work(x,y,z:longint);
begin
t[x,0]:=t[x,0]+z;
if t[x,1]=t[x,2] then exit;
if y<=(t[x,1]+t[x,2])div 2 then work(t[x,-1],y,z)
else work(t[x,-2],y,z);
end;
function qq(x,l,r:longint):longint;
var ll,rr:longint;
begin
if(t[x,1]=l)and(t[x,2]=r)then exit(t[x,0]);
ll:=t[x,1]; rr:=t[x,2];
if r<=(ll+rr)div 2 then exit(qq(t[x,-1],l,r))
else if l>(ll+rr)div 2 then exit(qq(t[x,-2],l,r))else
exit(qq(t[x,-1],l,(ll+rr)div 2)+qq(t[x,-2],(ll+rr)div 2+1,r));
end;
function qq2(y:longint):longint;
var k,l:longint;
begin
k:=1;
while t[k,1]<>t[k,2] do
begin
l:=t[k,-1];
if t[l,0]>=y then k:=l
else begin y:=y-t[l,0]; k:=t[k,-2]; end;
end;
exit(bh[t[k,1]]);
end;
begin
readln(n,m);
for i:=1 to n do
begin
read(j);
bh[i+80000]:=j;
wz[j]:=i+80000;
end;
readln;
ls:=80000; rs:=80000+n+1;
build(0,80000+n+80000,0);
for i:=1 to m do
begin
read(ch);
read(ch2);
while ch2<>‘ ‘ do read(ch2);
if ch=‘Q‘ then
begin
readln(j); writeln(qq2(j));
end else
if ch=‘T‘ then
begin
readln(j);
work(1,wz[j],-1);
work(1,ls,1); bh[wz[j]]:=0; wz[j]:=ls; bh[ls]:=j; dec(ls);
end else
if ch=‘B‘ then
begin
readln(j);
work(1,wz[j],-1);
work(1,rs,1); bh[wz[j]]:=0; wz[j]:=rs; bh[rs]:=j; inc(rs);
end else
if ch=‘A‘ then
begin
readln(j);
writeln(qq(1,0,wz[j]-1));
end else
begin
readln(j,k);
if k=0 then continue;
l:=qq(1,0,wz[j]);
l:=qq2(l+k);
y:=wz[j]; wz[j]:=wz[l]; wz[l]:=y;
y:=bh[wz[j]]; bh[wz[j]]:=bh[wz[l]]; bh[wz[l]]:=y;
end;
end;
end.