#include<bits/stdc++.h>
using namespace std;
const int N=50010;
int tr[N<<2],pre[N<<2],suf[N<<2];
int h[N];
bool vis[N];
void push_up(int p,int len){
pre[p]=pre[p<<1];
suf[p]=suf[p<<1|1];
if(pre[p<<1]==(len-(len>>1))) pre[p]=pre[p<<1]+pre[p<<1|1];
if(suf[p<<1|1]==(len>>1)) suf[p]=suf[p<<1]+suf[p<<1|1];
}
void build(int p,int pl,int pr){
if(pl==pr){
tr[p]=suf[p]=pre[p]=1;
return;
}
int mid=(pl+pr)>>1;
build(p<<1,pl,mid);
build(p<<1|1,mid+1,pr);
push_up(p,pr-pl+1);
}
void update(int x,int c,int p,int pl,int pr){
if(pl==pr){
tr[p]=suf[p]=pre[p]=c;
return;
}
int mid=(pl+pr)>>1;
if(x<=mid) update(x,c,p<<1,pl,mid);
else update(x,c,p<<1|1,mid+1,pr);
push_up(p,pr-pl+1);
}
int query(int x,int p,int pl,int pr){
if(pl==pr) return tr[p];
int mid=(pl+pr)>>1;
if(x<=mid){
if(x+suf[p<<1]>mid) return suf[p<<1]+pre[p<<1|1];
else return query(x,p<<1,pl,mid);
}
else{
if(mid+pre[p<<1|1]>=x) return pre[p<<1|1]+suf[p<<1];
else return query(x,p<<1,mid+1,pr);
}
}
int main(){
int n,m,x,cnt=0;
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;
build(1,1,n);
while(m--){
char op[10];
cin>>op;
if(op[0]=='Q'){
cin>>x;
if(vis[x]==1) cout<<0<<'\n';
else cout<<query(x,1,1,n)<<'\n';
}
else if(op[0]=='D'){
cin>>x;
h[++cnt]=x;
vis[x]=1;
update(x,0,1,1,n);
}
else{
x=h[cnt--];
vis[x]=0;
update(x,1,1,1,n);
}
}
return 0;
}
rt