#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("hotel.in");
ofstream g("hotel.out");
int N,P;
int Sum[4*NMAX],SumA[4*NMAX],SumB[4*NMAX],Lazy[4*NMAX];
void Build(int K,int L,int R)
{
if(L>R)
return;
if(L==R)
{
Sum[K]=SumA[K]=SumB[K]=1;
return;
}
Build(K*2,L,(L+R)/2);
Build(K*2+1,(L+R)/2+1,R);
Sum[K]=Sum[K*2]+Sum[K*2+1];
SumA[K]=SumB[K]=Sum[K];
}
void Insert(int K,int L,int R,int x,int y)
{
int node=K;
if(L>R || L>y || R<x)
return;
if(x<=L && R<=y)
{
Sum[K]=0;
SumA[K]=0;
SumB[K]=0;
Lazy[node]=0;
return;
}
if(Lazy[node]==0)
{
Sum[node*2]=0;Sum[node*2+1]=0;
SumA[node*2]=0;SumB[node*2]=0;SumA[node*2+1]=0;SumB[node*2+1]=0;
Lazy[node*2]=Lazy[node*2+1]=0;
Lazy[node]=-1;
}
if(Lazy[node]==1)
{
Sum[node*2]=SumA[node*2]=SumB[node*2]=(L+R)/2-L+1;
Sum[node*2+1]=SumA[node*2+1]=SumB[node*2+1]=R-(L+R)/2;
Lazy[node*2]=Lazy[node*2+1]=1;
Lazy[node]=-1;
}
Insert(2*K,L,(L+R)/2,x,y);
Insert(2*K+1,(L+R)/2+1,R,x,y);
Sum[K]=max(Sum[K*2],Sum[K*2+1]);
Sum[K]=max(Sum[K],SumB[K*2]+SumA[K*2+1]);
if(Sum[K*2]==(L+R)/2-L+1)
SumA[K]=Sum[K*2]+SumA[K*2+1];
else
SumA[K]=SumA[K*2];
if(Sum[K*2+1]==R-(L+R)/2)
SumB[K]=Sum[K*2+1]+SumB[K*2];
else
SumB[K]=SumB[K*2+1];
}
void Erase(int K,int L,int R,int x,int y)
{
int node=K;
if(L>R || L>y || R<x)
return;
if(x<=L && R<=y)
{
Sum[K]=R-L+1;
SumA[K]=R-L+1;
SumB[K]=R-L+1;
return;
}
if(x<=L && R<=y)
{
Sum[K]=R-L+1;
SumA[K]=R-L+1;
SumB[K]=R-L+1;
Lazy[node]=1;
return;
}
if(Lazy[node]==0)
{
Sum[node*2]=0;Sum[node*2+1]=0;
SumA[node*2]=0;SumB[node*2]=0;SumA[node*2+1]=0;SumB[node*2+1]=0;
Lazy[node*2]=Lazy[node*2+1]=0;
Lazy[node]=-1;
}
if(Lazy[node]==1)
{
Sum[node*2]=SumA[node*2]=SumB[node*2]=(L+R)/2-L+1;
Sum[node*2+1]=SumA[node*2+1]=SumB[node*2+1]=R-(L+R)/2;
Lazy[node*2]=Lazy[node*2+1]=1;
Lazy[node]=-1;
}
Erase(2*K,L,(L+R)/2,x,y);
Erase(2*K+1,(L+R)/2+1,R,x,y);
Sum[K]=max(Sum[K*2],Sum[K*2+1]);
Sum[K]=max(Sum[K],SumB[K*2]+SumA[K*2+1]);
if(Sum[K*2]==(L+R)/2-L+1)
SumA[K]=Sum[K*2]+SumA[K*2+1];
else
SumA[K]=SumA[K*2];
if(Sum[K*2+1]==R-(L+R)/2)
SumB[K]=Sum[K*2+1]+SumB[K*2];
else
SumB[K]=SumB[K*2+1];
}
int main()
{
f>>N>>P;
Build(1,1,N);
for(int i=1;i<=4*N;i++)
Lazy[i]=-1;
for(int i=1;i<=P;i++)
{
int type,a,b;
f>>type;
if(type==1)
{
f>>a>>b;
Insert(1,1,N,a,a+b-1);
}
if(type==2)
{
f>>a>>b;
Erase(1,1,N,a,a+b-1);
}
if(type==3)
g<<Sum[1]<<"\n";
}
return 0;
}