#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
int ait[4*nmax],n,p,max1,max2;
void update(int poz, int val, int nod, int st, int dr)
{
if(st==dr)
{
ait[nod]=val;
return;
}
int mij=(st+dr)>>1;
if(mij>=poz)
update(poz,val,nod<<1,st,mij);
else
update(poz,val,(nod<<1)+1,mij+1,dr);
ait[nod]=ait[nod<<1]+ait[(nod<<1)+1];
}
void query(int l,int r, int nod, int st, int dr)
{
if(st==dr)
{
if(!ait[nod])
++max1;
else
max1=0;
max2=max(max1,max2);
return;
}
int mij=(st+dr)>>1;
if(mij>=l)
query(l,r,nod<<1,st,mij);
if(mij<r)
query(l,r,(nod<<1)+1,mij+1,dr);
}
int main()
{
int x,y,z;
fin>>n>>p;
for(int i=1;i<=p;i++)
{
fin>>z;
switch(z)
{
case 1:
{
fin>>x>>y;
for(int i=x;i<x+y;i++)
update(i,1,1,1,n);
break;
}
case 2:
{
fin>>x>>y;
for(int i=x;i<x+y;i++)
update(i,0,1,1,n);
break;
}
case 3:
{
max1=max2=0;
query(1,n,1,1,n);
fout<<max2<<"\n";
break;
}
}
}
return 0;
}