#include <stdio.h>
//#define vv 100001
using namespace std;
int w,n,m,p,a[400070],maxim,l,pp,e;
void pomisor(int nod, int st, int dr)
{
if (st==dr)
{
a[nod]=w;
// z[++z[0]]=nod;
return;
}
int mij=(st+dr)/2;
if (p<=mij)
pomisor(2*nod,st,mij);
else
pomisor(2*nod+1,mij+1,dr);
a[nod]=a[2*nod]+a[2*nod+1];
}
void interogare(int nod, int st, int dr)
{
if (st==dr)
{
if (a[nod]==1)
++e;
else
e=0;
if (e>maxim)
maxim=e;
return;
}
int mij=(st+dr)/2;
if (p<=mij)
interogare(2*nod,st,mij);
if (mij<w)
interogare(2*nod+1,mij+1,dr);
}
void citire()
{
freopen("hotel.in","r",stdin);
scanf("%d%d", &n, &pp);
for (int i=1; i<=n; i++)
{
w=1;
p=i;
pomisor(1,1,n);
}
int q;
for (int i=1; i<=pp; i++)
{
scanf("%d", &q);
if (q==1)
{
scanf("%d%d", &l, &m);
for (int i=l; i<l+m; i++)
{
w=0;
p=i;
pomisor(1,1,n);
}
}
else if (q==2)
{
scanf("%d%d", &l, &m);
for (int i=l; i<l+m; i++)
{
w=1;
p=i;
pomisor(1,1,n);
}
}
else
{
maxim=e=0;
p=1;
w=n;
interogare(1,1,n);
/* for (int i=1; i<=n; i++)
if (a[z[i]]==1)
{
++e;
// if (e>maxim)
// maxim=e;
}
else
{
if (e>maxim)
maxim=e;
e=0;
}
if (e>maxim)
maxim=e;*/
printf("%d\n",maxim);
}
}
fclose(stdin);
}
int main()
{
freopen("hotel.out","w",stdout);
citire();
fclose(stdout);
return 0;
}