#include<bits/stdc++.h>
#define ls (now<<1)
#define rs ((now<<1)|1)
#define mid ((l+r)>>1)
#define maxn 500005
using namespace std;
struct tre{int mx,lmx,rmx,siz,lazy;}tree[maxn<<5];
inline void pd(int now){
if(!tree[now].lazy) return;
tree[ls].lazy=tree[rs].lazy=tree[now].lazy;
if(tree[now].lazy=1){
tree[rs].mx=tree[rs].lmx=tree[rs].rmx=tree[rs].siz;
tree[ls].mx=tree[ls].lmx=tree[ls].rmx=tree[ls].siz;
}else{
tree[rs].mx=tree[rs].lmx=tree[rs].rmx=0;
tree[ls].mx=tree[ls].lmx=tree[ls].rmx=0;
}
tree[now].lazy=0;
}
inline void up(int now){
tree[now].siz=tree[ls].siz+tree[rs].siz;
tree[now].mx=max(tree[ls].mx,max(tree[rs].mx,tree[ls].rmx+tree[rs].lmx));
if(tree[ls].siz==tree[ls].mx) tree[now].lmx=tree[ls].siz+tree[rs].lmx;
else tree[now].lmx=tree[ls].lmx;
if(tree[rs].siz==tree[rs].mx) tree[now].rmx=tree[rs].siz+tree[ls].rmx;
else tree[now].rmx=tree[rs].rmx;
}
void modify(int now,int l,int r,int L,int R,int val){
if(l>=L&&r<=R){
tree[now].lazy=val;
if(val==1){
tree[now].lmx=tree[now].rmx=tree[now].mx=tree[now].siz;
}else{
tree[now].lmx=tree[now].rmx=tree[now].mx=0;
}
return;
}
pd(now);
if(L<=mid) modify(ls,l,mid,L,R,val);
if(R>mid) modify(rs,mid+1,r,L,R,val);
up(now);
}
int query(int now,int l,int r,int len){
if(l==r) return l;
pd(now);
if(tree[ls].siz>=len) return query(ls,l,mid,len);
if(tree[rs].lmx+tree[ls].rmx>=len) return mid-tree[ls].rmx+1;
if(tree[rs].mx>=len) return query(rs,mid+1,r,len);
}
void build(int now,int l,int r){
if(l==r) {
tree[now].lazy=0;tree[now].siz=tree[now].rmx=tree[now].lmx=tree[now].mx=1;
return;
}
build(ls,l,mid);
build(rs,mid+1,r);
up(now);
}
int main(){
int ans=0,n,q;
cin>>n>>q;
build(1,1,n);
while(q--){
cout<<tree[1].mx<<endl;
char opt;cin>>opt;
if(opt=='A'){
int x;cin>>x;
if(tree[1].mx>=x){
int l=query(1,1,n,x);
modify(1,1,n,l,l+x-1,2);
}else ans++;
}else{
int l,r;cin>>l>>r;
modify(1,1,n,l,r,1);
}
}
cout<<ans<<endl;
}