rt,有事踹我
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const int N=500005;
int n,m,ans;
namespace T{
struct node{
int l,r,lzy;
int lmax[2];
}t[N<<2];
inline void up(int u){
const int ls=u<<1,rs=u<<1|1;//const 卡常
if(t[ls].lmax[0]==t[ls].r-t[ls].l+1){
t[u].lmax[0]=t[ls].lmax[0]+t[rs].lmax[0];
}else if(t[ls].lmax[0]==0){
t[u].lmax[0]=0;
t[u].lmax[1]=t[u].lmax[1]+t[u].lmax[1];
}else{
t[u].lmax[0]=t[ls].lmax[0];
t[u].lmax[1]=0;
}
}
inline void down(int u){
const int ls=u<<1,rs=u<<1|1;
if(t[u].lzy==-1) return;
if(t[u].lzy==0){
t[ls].lzy=t[rs].lzy=0;
t[ls].lmax[0]=t[ls].r-t[ls].l+1;
t[ls].lmax[1]=0;
t[rs].lmax[0]=t[rs].r-t[rs].l+1;
t[rs].lmax[1]=0;
}else{
t[ls].lzy=t[rs].lzy=1;
t[ls].lmax[1]=t[ls].r-t[ls].l+1;
t[ls].lmax[0]=0;
t[rs].lmax[1]=t[rs].r-t[rs].l+1;
t[rs].lmax[0]=0;
}
}
inline void build(int u,int l,int r){
t[u].l=l;t[u].r=r;t[u].lzy=-1;
if(l==r) {
t[u].lmax[0]=1;t[u].lmax[1]=0;
return;
}
int m=(l+r)>>1;
build(u<<1,l,m);build(u<<1|1,m+1,r);
up(u);
}
inline void upd(int u,int l,int r,int opt){
if(t[u].l>=l&&t[u].r<=r){
if(t[u].lzy==-1) {
t[u].lzy=opt;
if(t[u].lzy==1){
t[u].lmax[0]=0;
t[u].lmax[1]=t[u].r-t[u].l+1;
}else{
t[u].lmax[1]=0;
t[u].lmax[0]=t[u].r-t[u].l+1;
}
}else{
t[u].lzy^=1;
if(t[u].lzy==1){
t[u].lmax[0]=0;
t[u].lmax[1]=t[u].r-t[u].l+1;
}else{
t[u].lmax[1]=0;
t[u].lmax[0]=t[u].r-t[u].l+1;
}
}
return;
}
down(u);
int m=(t[u].l+t[u].r)>>1;
if(l<=m) upd(u<<1,l,r,opt);
if(r>m) upd(u<<1|1,l,r,opt);
up(u);
}
inline void ask(int u,int l,int r){
if(t[u].l>=l&&t[u].r<=r){
return ;
}
down(u);
int m=(t[u].l+t[u].r)+1;
if(l<=m) ask(u<<1,l,r);
if(r>m) ask(u<<1|1,l,r);
up(u);
}
}
signed main(){
// freopen("operation.in","r",stdin);
// freopen("operation.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n>>m;
T::build(1,1,n);
while(m--){
char opt;
cin>>opt;
if(opt=='A'){
int x;
cin>>x;
T::ask(1,1,x);
if(x>T::t[1].lmax[0]){
++ans;
}else{
T::upd(1,1,x,1);
}
}else{
int l,r;
cin>>l>>r;
T::upd(1,l,r,0);
}
}
cout<<ans;
return 0;
}