#include <iostream>
#include<fstream>
using namespace std;
struct node
{
int mx,left,right,full,viz,vall;
}arb[300005];
int i,n,q,x,y,st,dr,tip,val;
void update(int nod,int l,int r,int st,int dr,int val)
{
if(st<=l && r<=dr)
{
x=r-l+1;
arb[nod].vall=val;
if(val==1)
{
arb[nod].left=0;
arb[nod].right=0;
arb[nod].mx=0;
arb[nod].full=0;
arb[nod].viz=1;
}
else
{
arb[nod].left=x;
arb[nod].right=x;
arb[nod].mx=x;
arb[nod].full=1;
arb[nod].viz=1;
}
return;
}
int m=(l+r)/2;
if(arb[nod].viz==1)
{
update(2*nod,l,m,l,m,arb[nod].vall);
update(2*nod+1,m+1,r,m+1,r,arb[nod].vall);
arb[nod].viz=0;
}
if(st<=m) update(2*nod,l,m,st,dr,val);
if(m<dr) update(2*nod+1,m+1,r,st,dr,val);
if(arb[2*nod+1].full==1) arb[nod].right=arb[2*nod].right+arb[2*nod+1].mx;
else arb[nod].right=arb[2*nod+1].right;
if(arb[2*nod].full==1) arb[nod].left=arb[2*nod].mx+arb[2*nod+1].left;
else arb[nod].left=arb[2*nod].left;
arb[nod].mx=max(arb[2*nod].right+arb[2*nod+1].left,max(arb[2*nod].mx,arb[2*nod+1].mx));
if(arb[2*nod].full==1&&arb[2*nod+1].full==1) arb[nod].full=1;
}
int main()
{
ifstream f("hotel.in");
ofstream g("hotel.out");
f>>n>>q;
update(1,1,n,1,n,0);
for(i=1;i<=q;i++)
{
f>>tip;
if(tip==1)
{
val=1;
f>>x>>y;
st=x;dr=x+y-1;
update(1,1,n,st,dr,1);
continue;
}
if(tip==2)
{
f>>x>>y;
st=x;
dr=x+y-1;
update(1,1,n,st,dr,0);
continue;
}
g<<arb[1].mx<<'\n';
}
return 0;
}