#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;
const int MAXN = 50005;
const int MOD = 2147483647;
struct Node
{
int left;
int right;
int size;
int val;
int key;
}tree[MAXN];
int root,tot;
int add(int val){
tot++;
tree[tot].size = 1;
tree[tot].val = val;
tree[tot].key = rand()%MOD;
tree[tot].left = 0;
tree[tot].right = 0;
return tot;
}
void update_root(int now){
int left,right;
left = tree[now].left;
right = tree[now].right;
tree[now].size = tree[left].size + tree[right].size + 1;
}
void split_new(int now, int &a, int &b, int val){
if(now == 0){
a = 0;
b = 0;
return;
}
if(tree[now].val <= val){
a = now;
split_new(tree[now].right, tree[a].right, b, val);
}else{
b = now;
split_new(tree[now].left, a, tree[b].left, val);
}
update_root(now);
}
void merge_new(int &now, int a, int b){
if(a==0 || b==0){
now = a+b;
return;
}
if(tree[a].key<tree[b].key){
now = a;
merge_new(tree[now].right, tree[a].right, b);
}else{
now = b;
merge_new(tree[now].left, a, tree[b].left);
}
update_root(now);
}
int find_new(int now, int rank){
if(rank==0){
return 0;
}
while (tree[tree[now].left].size+1 != rank){
if(tree[tree[now].left].size >= rank){
now = tree[now].left;
}else{
rank -= tree[tree[now].left].size + 1;
now = tree[now].right;
}
}
return tree[now].val;
}
void insert_new(int val){
int x,y,z;
x = 0;
y = 0;
z = add(val);
split_new(root, x, y, val);
merge_new(x,x,z);
merge_new(root, x, y);
}
void del_new(int val){
int x,y,z;
x = y = z = 0;
split_new(root, x, y, val);
split_new(x, x, z, val-1);
merge_new(z, tree[z].left, tree[z].right);
merge_new(x, x, z);
merge_new(root, x, y);
}
int get_pre(int val){
int x,y;
x = y = 0;
split_new(root, x, y, val-1);
int u=find_new(x, tree[x].size);
merge_new(root, x, y);
return u;
}
int get_next(int val){
int x,y;
x = y = 0;
split_new(root,x,y,val);
int u=find_new(y,1);
merge_new(root,x,y);
return u;
}
int opp[MAXN],d[MAXN];
void solve(){
char op[2];
int x,y,n,m;
memset(tree,0,sizeof(tree));
add(MOD);
root=1;
// tree[root].size =0;
int s=0;
int j=1;
while(~scanf("%d%d",&n,&m)){
insert_new(0);
insert_new(n+1);
for(int i=1;i<=m;i++){
cin>>op;
if(op[0]=='D'){
cin>>x;
d[x]=1;
opp[++s]=x;
insert_new(x);
}
if(op[0]=='Q'){
cin>>x;
if(d[x]==1){
printf("0\n");
continue;
}
int u1=get_next(x);
int u2=get_pre(x);
printf("%d\n",u1-u2-1);
}
if(op[0]=='R'){
int x=opp[s];
int xx=opp[s--];
del_new(x);
d[xx]=0;
}
}
}
}
int main(){
solve();
return 0;
}