# include <fstream>
# include <cstdlib>
# define DIM 500000
# define max(a,b) a>b?a:b
using namespace std;
int n, p, l[DIM], r[DIM], a[DIM];
void init (int k, int st, int dr)
{
if (st==dr)
{
a[k]=l[k]=r[k]=1;
return;
}
int mij=(st+dr)/2;
init(2*k, st, mij);
init(2*k+1, mij+1, dr);
a[k]=l[k]=r[k]=dr-st+1;
}
void upd (int k, int st, int dr, int I, int J, int v)
{
if (st<=I && dr>=J)
{
a[k]=l[k]=r[k]=v*(J-I+1);
return;
}
int mij=(I+J)/2;
if (a[k]==0){a[2*k]=l[2*k]=r[2*k]=0;a[2*k+1]=l[2*k+1]=r[2*k+1]=0;}
if (a[k]==J-I+1){a[2*k]=l[2*k]=r[2*k]=mij-I+1;a[2*k+1]=l[2*k+1]=r[2*k+1]=J-mij;}
if (st<=mij)upd(2*k, st, dr, I, mij, v);
if (dr>mij)upd(2*k+1, st, dr, mij+1, J, v);
l[k]=l[2*k];
if (l[2*k]==mij-I+1)l[k]+=l[2*k+1];
r[k]=r[2*k+1];
if (r[2*k+1]==J-mij)r[k]+=r[2*k];
a[k]=max(r[2*k]+l[2*k+1], (max(a[2*k],a[2*k+1])));
}
int main ()
{
ifstream fin ("hotel.in");
freopen("hotel.out", "w", stdout);
fin>>n>>p;
int c, i, m;
init(1, 1, n);
for(;p--;)
{
fin>>c;
if (c==1)
{
fin>>i>>m;
upd(1, i, i+m-1, 1, n, 0);
}
if (c==2)
{
fin>>i>>m;
upd(1, i, i+m-1, 1, n, 1);
}
if (c==3)
printf("%d\n", a[1]);
}
return 0;
}