#include <fstream>
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
int v[400000],st[400000],cd,dr[400000],n,p,nr,poz,i,c;
void pune(int nod,int s,int d,int a,int b)
{
if(a<=s && d<=b)
{
v[nod]=st[nod]=dr[nod]=0;
}
else
{
int mijlok=(s+d)/2;
if(v[nod]==d-s+1)
{
v[nod*2]=st[nod*2]=dr[nod*2]=mijlok-s+1;
v[nod*2+1]=st[nod*2+1]=dr[nod*2+1]=d-mijlok;
}
if(a<=mijlok)
pune(nod*2,s,mijlok,a,b);
if(mijlok<b)
pune(nod*2+1,mijlok+1,d,a,b);
v[nod]=max(v[nod*2],v[nod*2+1]);
v[nod]=max(v[nod],dr[nod*2]+st[nod*2+1]);
st[nod]=st[nod*2];
if(st[nod]==mijlok-s+1)
st[nod]+=st[nod*2+1];
dr[nod]=dr[nod*2+1];
if(dr[nod]==d-mijlok)
dr[nod]+=dr[nod*2];
}
}
void ia(int nod,int s,int d,int a,int b)
{
if(a<=s && d<=b)
{
v[nod]=st[nod]=dr[nod]=d-s+1;
}
else
{
int mijlok=(s+d)/2;
if(v[nod]==0)
{
v[nod*2]=st[nod*2]=dr[nod*2]=0;
v[nod*2+1]=st[nod*2+1]=dr[nod*2+1]=0;
}
if(a<=mijlok)
ia(nod*2,s,mijlok,a,b);
if(mijlok<b)
ia(nod*2+1,mijlok+1,d,a,b);
v[nod]=max(v[nod*2],v[nod*2+1]);
v[nod]=max(v[nod],dr[nod*2]+st[nod*2+1]);
st[nod]=st[nod*2];
if(st[nod]==mijlok-s+1)
st[nod]+=st[nod*2+1];
dr[nod]=dr[nod*2+1];
if(dr[nod]==d-mijlok)
dr[nod]+=dr[nod*2];
}
}
int main()
{
fin>>n>>p;
v[1]=st[1]=dr[1]=n;
for(i=1;i<=p;++i)
{
fin>>cd;
if(cd==1)
{
fin>>poz>>nr;
int da=poz+nr-1;
pune(1,1,n,poz,da);
}
if(cd==2)
{
fin>>poz>>nr;
int da=poz+nr-1;
ia(1,1,n,poz,da);
}
if(cd==3)
fout<<v[1]<<"\n";
}
return 0;
}
/*
#include<fstream>
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
#define Max 100000
int sol[5*Max],n,start,end;
int sst[5*Max],sdr[5*Max];
void modi1(int,int,int);
void modi2(int,int,int);
int main()
{
int t,k;
fin>>n>>t;
sol[1]=sst[1]=sdr[1]=n;
while(t--)
{
fin>>k;
if(k<3)
{
fin>>start>>end;
end=start+end-1;
if(k==1) modi1(1,1,n);
else modi2(1,1,n);
}
else fout<<sol[1]<<'\n';
}
return 0;
}
void modi1(int k,int i,int j)
{
if(start<=i&&j<=end)
{
sol[k]=sst[k]=sdr[k]=0;
return;
}
int mij=(i+j)/2;
if(sol[k]==j-i+1)
{
sol[2*k]=sst[2*k]=sdr[2*k]=mij-i+1;
sol[2*k+1]=sst[2*k+1]=sdr[2*k+1]=j-mij;
}
if(start<=mij) modi1(2*k,i,mij);
if(mij<end) modi1(2*k+1,mij+1,j);
sol[k]=max(sol[2*k],sol[2*k+1]);
sol[k]=max(sol[k],sdr[2*k]+sst[2*k+1]);
sst[k]=sst[2*k];
if(mij-i+1==sst[2*k])
sst[k]+=sst[2*k+1];
sdr[k]=sdr[2*k+1];
if(j-mij==sdr[2*k+1])
sdr[k]+=sdr[2*k];
}
void modi2(int k,int i,int j)
{
if(start<=i&&j<=end)
{
sol[k]=sst[k]=sdr[k]=j-i+1;
return;
}
if(sol[k]==0)
{
sol[2*k]=sst[2*k]=sdr[2*k]=0;
sol[2*k+1]=sst[2*k+1]=sdr[2*k+1]=0;
}
int mij=(i+j)/2;
if(start<=mij) modi2(2*k,i,mij);
if(mij<end) modi2(2*k+1,mij+1,j);
sol[k]=max(sol[2*k],sol[2*k+1]);
sol[k]=max(sol[k],sdr[2*k]+sst[2*k+1]);
sst[k]=sst[2*k];
if(mij-i+1==sst[2*k])
sst[k]+=sst[2*k+1];
sdr[k]=sdr[2*k+1];
if(j-mij==sdr[2*k+1])
sdr[k]+=sdr[2*k];
}*/