#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;
}