#include<bits/stdc++.h>
#define FL(i,a,b) for(ll i=(a);i<=(b);i++)
#define FR(i,a,b) for(ll i=(a);i>=(b);i--)
#define ll long long
using namespace std;
const ll MAXN = 5e5 + 10;
struct Segment_Tree{
#define ls (x<<1)
#define rs (x<<1|1)
struct node{
ll l,r,le,ri,as,tg;
ll len(){
return r-l+1;
}
void tag(ll x){
tg=x;
if(!x) le=ri=as=len();
else le=ri=as=0;
}
}t[MAXN<<2];
void Up(node &A,node B,node C){
A.as=max({B.as,C.as,B.le+C.ri});
A.le=(B.le==B.len())?B.len()+C.le:B.le;
A.ri=(C.ri==C.len())?C.len()+B.ri:C.ri;
A.as=max({A.as,A.le,A.ri});
}
void pushdown(ll x){
if(t[x].tg!=-1){
t[ls].tag(t[x].tg);
t[rs].tag(t[x].tg);
}
t[x].tg=-1;
}
void build(ll x,ll l,ll r){
t[x].l=l,t[x].r=r,t[x].tg=-1;
t[x].le=t[x].ri=t[x].as=t[x].len();
if(l==r) return ;
ll mid=(l+r)>>1;
build(ls,l,mid);
build(rs,mid+1,r);
Up(t[x],t[ls],t[rs]);
}
void update(ll x,ll l,ll r,ll k){
if(l<=t[x].l&&t[x].r<=r){
t[x].tag(k);
return ;
}
ll mid=(t[x].l+t[x].r)>>1;
pushdown(x);
if(l<=mid) update(ls,l,r,k);
if(r>mid) update(rs,l,r,k);
Up(t[x],t[ls],t[rs]);
}
ll query(ll x,ll k){
pushdown(x);
if(t[x].l==t[x].r) return t[x].l;
ll mid=(t[x].l+t[x].r)>>1;
if(t[ls].as>=k) return query(ls,k);
else if(t[ls].ri+t[rs].le>=k) return mid-t[ls].ri+1;
else return query(rs,k);
}
#undef ls
#undef rs
}T;
signed main(){
ll n,m,ans=0;
scanf("%lld%lld",&n,&m);
T.build(1,1,n);
while(m--){
char op;
ll l,r;
scanf(" %c%lld",&op,&l);
if(op=='A'){
if(T.t[1].as<l) ans++;
else{
ll pos=T.query(1,l);
T.update(1,pos,pos+l-1,1);
}
}
else{
scanf("%lld",&r);
if(l>r) swap(l,r);
T.update(1,l,r,0);
}
}
printf("%lld\n",ans);
}