#include<stdio.h>
#define MaxN 1000
#define sum dr - st + 1
#define lf (2 * nod)
#define rf (2 * nod) + 1
#define mij (st + dr) / 2
int AIC[MaxN];
int AIL[MaxN];
int AIR[MaxN];
int N;
int P;
int stare;
int a;
int b;
int max(int a,int b)
{
return a>b ? a:b;
}
void build(int nod,int st,int dr)
{
AIC[nod] = sum;
AIL[nod] = sum;
AIR[nod] = sum;
if(st < dr)
{
build(lf , st , mij);
build(rf , mij + 1 , dr);
}
}
int update(int nod,int st,int dr,int a,int b,int v)
{
if(st == dr)
{
AIC[nod] = v;
AIL[nod] = v;
AIR[nod] = v;
return 0;
}
if(a <= mij && b >= st)
update(lf , st , mij , a , b , v);
if(b > mij && a <= dr)
update(rf , mij + 1 , dr , a , b , v);
AIC[nod] = max(max(AIC[lf] , AIC[rf]) , AIR[lf] + AIL[rf]);
if(AIR[rf] && AIR[rf] == AIL[rf])
AIR[nod] = AIR[lf] + AIR[rf];
else
AIR[nod] = AIR[rf];
if(AIL[lf] && AIL[lf] == AIR[lf])
AIL[nod] = AIL[lf] + AIL[rf];
else
AIL[nod] = AIL[lf];
}
int main()
{
FILE *f = fopen("hotel.in","r");
FILE *g = fopen("hotel.out","w");
fscanf(f,"%d %d",&N,&P);
build(1,1,N);
for(int i=1;i<=P;i++)
{
fscanf(f,"%d ",&stare);
if(stare < 3)
{
fscanf(f,"%d %d",&a,&b);
update(1,1,N,a,a+b-1,1-stare%2);
}
else
fprintf(g,"%d\n",AIC[1]);
}
fclose(g);
fclose(f);
}