#include<iostream>
#include<cstdio>
#include<cstdlib>
#define N 500005
using namespace std;
int n,m,ans=0,lk[N<<2],rk[N<<2],mk[N<<2];
short int add[N<<2];
inline int max(int a,int b){ return a>b?a:b; }
inline void PushUp(int u,int ls,int rs){
mk[u]=max(max(mk[u<<1],mk[u<<1|1]),rk[u<<1]+lk[u<<1|1]);
lk[u]=lk[u<<1]+(lk[u<<1]==ls)*lk[u<<1|1];
rk[u]=rk[u<<1|1]+(rk[u<<1|1]==rs)*rk[u<<1|1];
}
inline void PushDown(int u,int ls,int rs){
if(!add[u]||(!ls&&!rs)) return;
mk[u<<1]=lk[u<<1]=rk[u<<1]=(add[u]>0)*ls;
mk[u<<1|1]=lk[u<<1|1]=rk[u<<1|1]=(add[u]>0)*rs;
add[u<<1]=add[u<<1|1]=add[u];add[u]=0;
}
void Build(int l,int r,int u){
lk[u]=rk[u]=mk[u]=r-l+1;
if(l==r) return;int mid=(l+r)>>1;
Build(l,mid,u<<1);Build(mid+1,r,u<<1|1);
}
int Query(int C,int l,int r,int u){
int mid=(l+r)>>1;
PushDown(u,mid-l+1,r-mid);
if(mk[u<<1]>=C) return Query(C,l,mid,u<<1);
else if(rk[u<<1]+lk[u<<1|1]>=C) return mid-rk[u<<1]+1;
else return Query(C,mid+1,r,u<<1|1);
}
void Update(int L,int R,int l,int r,int u,int v){
if(L<=l&&r<=R){
lk[u]=rk[u]=mk[u]=(v>0)*(r-l+1);
add[u]=v;
return;
}
int mid=(l+r)>>1;
PushDown(u,mid-l+1,r-mid);
if(L<=mid) Update(L,R,l,mid,u<<1,v);
if(R>mid) Update(L,R,mid+1,r,u<<1|1,v);
PushUp(u,mid-l+1,r-mid);
}
int main(){
scanf("%d%d",&n,&m);
Build(1,n,1);
for(int i=1,p,a,b;i<=m;++i){
char opt=getchar();
while(opt!='A'&&opt!='L') opt=getchar();
if(opt=='A'){
scanf("%d",&p);
if(mk[1]<p) ++ans;
else{
int pos=Query(p,1,n,1);
Update(pos,pos+p-1,1,n,1,-1);
}
}
if(opt=='L'){
scanf("%d%d",&a,&b);
Update(a,b,1,n,1,1);
}
}
printf("%d\n",ans);
return 0;
}```