#include <stdio.h>
#define log 18
#define inf 2000000000
struct elem{int suf,pref,secv;};
elem aint[1<<log];
int val;
int x,y;
int maxim(int a,int b){
if(a>b)
return a;
else
return b;
}
void reset(int nod,int nr){
aint[nod].suf=nr;
aint[nod].pref=nr;
aint[nod].secv=nr;
}
void update(int nod,int st,int dr){
//update pe intervalul [x,y]
if(x<=st&&dr<=y){
if(val==1)
reset(nod,dr-st+1);
else
reset(nod,0);
}
else{
int mij=(st+dr)/2;
if(aint[nod].secv==0){
reset(2*nod,0);
reset(2*nod+1,0);
}
if(aint[nod].secv==dr-st+1){
reset(2*nod,mij-st+1);
reset(2*nod+1,dr-mij);
}
if(x<=mij)
update(2*nod,st,mij);
if(mij<y)
update(2*nod+1,mij+1,dr);
aint[nod].secv=maxim(aint[2*nod].suf+aint[2*nod+1].pref,maxim(aint[2*nod].secv,aint[2*nod+1].secv));
if(aint[2*nod].pref==mij-st+1)
aint[nod].pref=aint[2*nod].pref+aint[2*nod+1].pref;
else
aint[nod].pref=aint[2*nod].pref;
if(aint[2*nod+1].suf==dr-mij)
aint[nod].suf=aint[2*nod].suf+aint[2*nod+1].suf;
else
aint[nod].suf=aint[2*nod+1].suf;
}
}
int main(){
FILE *fin,*fout;
fin=fopen("hotel.in","r");
fout=fopen("hotel.out","w");
int i,n,m,cer;
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++){
val=1;
x=i;
y=i;
update(1,1,n);
}
fscanf(fin,"%d",&m);
for(i=1;i<=m;i++){
fscanf(fin,"%d",&cer);
if(cer==1){
fscanf(fin,"%d%d",&x,&y);
val=0;
y=y+x-1;
update(1,1,n);
}
if(cer==2){
fscanf(fin,"%d%d",&x,&y);
val=1;
y=y+x-1;
update(1,1,n);
}
if(cer==3)
fprintf(fout,"%d\n",aint[1].secv);
}
fclose(fin);
fclose(fout);
return 0;
}