#include<stdio.h>
#define fin "hotel.in"
#define fout "hotel.out"
#define Nmax 1000000
int n,p,a,b,segm[Nmax][4];
FILE *in,*out;
int maxf(int a,int b) { (a>b)?(a):(a=b); return a; }
void insert(int nod,int st,int dr) {
int m,len1,len2;
if (a<=st && dr<=b) {
segm[nod][0]=segm[nod][1]=segm[nod][2]=0;
segm[nod][3]=1;
}
else {
m=(st+dr)/2;
len2=dr-m;
len1=m-st+1;
if (segm[nod][3]==1) {
segm[nod][3]=0;
segm[2*nod][0]=0; segm[2*nod][1]=0;
segm[2*nod][2]=0; segm[2*nod][3]=1;
segm[2*nod+1][0]=0; segm[2*nod+1][1]=0;
segm[2*nod+1][2]=0; segm[2*nod+1][3]=1;
}
if (segm[nod][3]==2) {
segm[nod][3]=0;
segm[2*nod][0]=len1; segm[2*nod][1]=len1;
segm[2*nod][2]=len1; segm[2*nod][3]=2;
segm[2*nod+1][0]=len2; segm[2*nod+1][1]=len2;
segm[2*nod+1][2]=len2; segm[2*nod+1][3]=2;
}
if (a<=m)
insert(2*nod,st,m);
if (b>m)
insert(2*nod+1,m+1,dr);
segm[nod][2]=maxf(segm[2*nod][1]+segm[2*nod+1][0],segm[2*nod][2]);
segm[nod][2]=maxf(segm[nod][2],segm[2*nod+1][2]);
if (segm[2*nod][0]==len1)
segm[nod][0]=segm[2*nod][0]+segm[2*nod+1][0];
else
segm[nod][0]=segm[2*nod][0];
if (segm[2*nod+1][1]==len2)
segm[nod][1]=segm[2*nod+1][1]+segm[2*nod][1];
else
segm[nod][1]=segm[2*nod+1][1];
}
}
void del(int nod,int st,int dr) {
int m,len1,len2;
if (a<=st && dr<=b) {
segm[nod][0]=segm[nod][1]=segm[nod][2]=dr-st+1;
segm[nod][3]=2;
}
else {
m=(st+dr)/2;
len2=dr-m;
len1=m-st+1;
if (segm[nod][3]==1) {
segm[nod][3]=0;
segm[2*nod][0]=0; segm[2*nod][1]=0;
segm[2*nod][2]=0; segm[2*nod][3]=1;
segm[2*nod+1][0]=0; segm[2*nod+1][1]=0;
segm[2*nod+1][2]=0; segm[2*nod+1][3]=1;
}
if (segm[nod][3]==2) {
segm[nod][3]=0;
segm[2*nod][0]=len1; segm[2*nod][1]=len1;
segm[2*nod][2]=len1; segm[2*nod][3]=2;
segm[2*nod+1][0]=len2; segm[2*nod+1][1]=len2;
segm[2*nod+1][2]=len2; segm[2*nod+1][3]=2;
}
if (a<=m)
del(2*nod,st,m);
if (b>m)
del(2*nod+1,m+1,dr);
segm[nod][2]=maxf(segm[2*nod][1]+segm[2*nod+1][0],segm[2*nod][2]);
segm[nod][2]=maxf(segm[nod][2],segm[2*nod+1][2]);
if (segm[2*nod][0]==len1)
segm[nod][0]=segm[2*nod][0]+segm[2*nod+1][0];
else
segm[nod][0]=segm[2*nod][0];
if (segm[2*nod+1][1]==len2)
segm[nod][1]=segm[2*nod+1][1]+segm[2*nod][1];
else
segm[nod][1]=segm[2*nod+1][1];
}
}
void init(int nod,int st,int dr) {
int m;
m=(st+dr)/2;
segm[nod][0]=segm[nod][1]=segm[nod][2]=dr-st+1;
if (st!=dr) init(2*nod,st,m);
if (st!=dr) init(2*nod+1,m+1,dr);
}
int main() {
int i,op;
in=fopen(fin,"r"); out=fopen(fout,"w");
fscanf(in,"%i%i",&n,&p);
a=1; b=n;
init(1,1,n);
for (i=1;i<=p;i++) {
fscanf(in,"%i",&op);
if (op==3) fprintf(out,"%i\n",segm[1][2]);
if (op==1) {
fscanf(in,"%i%i",&a,&b);
b+=a-1;
insert(1,1,n);
}
if (op==2) {
fscanf(in,"%i%i",&a,&b);
b+=a-1;
del(1,1,n);
}
}
for (i=1;i<=20;++i)
printf("%i: %i %i %i\n",i,segm[i][0],segm[i][1],segm[i][2]);
fclose(in); fclose(out);
return 0;
}