#include<stdio.h>
int t,n,sti,dri;
struct arbore{
int prefix,sufix,secvmax;
} arb[1<<25];
int max(int a, int b)
{
return a>b ?a :b;
}
int maxim(int a, int b, int c)
{
int h=max(b,c);
return a> h ? a :h;
}
bool liber,plin;
void ocup(int p, int st, int dr){
if(liber){
arb[p].secvmax =arb[p].prefix = arb[p].sufix = dr-st+1;
}
if(sti <= st && dr <= dri){
arb[p].secvmax = arb[p].prefix = arb[p].sufix = 0;
return;
}
if(dr < sti || st > dri){
return;
}
if(arb[p].secvmax == dr-st+1 && !liber){
liber = true;
ocup(2*p, st, (st+dr)/2);
ocup(2*p+1,(st+dr)/2+1, dr);
liber = false;
} else {
ocup(2*p,st, (st+dr)/2);
ocup(2*p+1,(st+dr)/2+1, dr);
}
arb[p].secvmax = maxim(arb[2*p].secvmax, arb[2*p+1].secvmax, arb[2*p].sufix+arb[2*p+1].prefix);
if(arb[2*p].prefix == (st+dr)/2-st+1){
arb[p].prefix = arb[2*p].prefix + arb[2*p+1].prefix;
} else {
arb[p].prefix = arb[2*p].prefix;
}
if(arb[2*p+1].sufix==dr-(st+dr)/2){
arb[p].sufix=arb[2*p].sufix+arb[2*p+1].sufix;
} else{
arb[p].sufix=arb[2*p+1].sufix;
}
}
void empty(int p, int st, int dr){
if(plin){
arb[p].secvmax = arb[p].prefix = arb[p].sufix = 0;
}
if(sti <= st && dr <= dri){
arb[p].secvmax = arb[p].prefix = arb[p].sufix = dr-st+1;
return;
}
if(dr < sti || st > dri){
return;
}
if(arb[p].secvmax == plin && !plin){
plin = true;
empty(2*p, st, (st+dr)/2);
empty(2*p+1,(st+dr)/2+1, dr);
plin = false;
} else {
empty(2*p,st, (st+dr)/2);
empty(2*p+1,(st+dr)/2+1, dr);
}
arb[p].secvmax = maxim(arb[2*p].secvmax, arb[2*p+1].secvmax, arb[2*p].sufix+arb[2*p+1].prefix);
if(arb[2*p].prefix == (st+dr)/2-st+1){
arb[p].prefix = arb[2*p].prefix + arb[2*p+1].prefix;
} else {
arb[p].prefix = arb[2*p].prefix;
}
if(arb[2*p+1].sufix==dr-(st+dr)/2){
arb[p].sufix=arb[2*p].sufix+arb[2*p+1].sufix;
} else{
arb[p].sufix=arb[2*p+1].sufix;
}
}
int main(){
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
int tip,a,b;
scanf("%d%d",&n,&t);
arb[1].secvmax=arb[1].prefix= arb[1].sufix=n;
for(int i=1; i<=t; i++)
{
scanf("%d",&tip);
if(tip==1)
{
scanf("%d%d",&a,&b);
ocup(a,a+b-1);
}
if(tip==2)
{
scanf("%d%d",&a,&b);
empty(a,a+b-1);
}
if(tip==3)
{
printf("%d\n",arb[1].secvmax);
}
}
return 0;
}