#include <iostream>
#include <stdio.h>
using namespace std;
FILE *f=fopen("hotel.in","r");
FILE *g=fopen("hotel.out","w");
void update(nod,l,r,si,sf,val)
{
int m;
if (l==r){a[nod]+=val;return}
else
{
m=(l+r)/2;
if (si<=m)update(2*nod,l,m,si,sf,val);
if (sf>m)update(2*nod,m+1,r,si,sf,val);
}
}
void query(int nod int l, int r)
{
int m=(l+r)/2;
if (l==r)
{
if(a[nod]==0)
{
k++;
if(k>max1) max1=k;
}
else k=0;
}
else
{
query(l,m,2*nod);
query(m+1,r,2*nod+1);
}
}
int main()
{
fscanf(f,"%d%d",&n,&p);
for(i=1;i<=p;i++)
{
fscanf(f,"%d",&l);
switch(l)
{
case '1':
{
fscanf(f,"%d%d",&p,&nr);
update(1,1,n,p,p+nr-1,1)
}
case '2':
{
fscanf(f,"%d%d",&p,&u);
update(1,1,n,p,p+nr-1,-1)
}
case '3':
{
k=0;
max1=0;
query(1,1,n);
fprintf(g,"%d",max1);
}
}
fclose(g);
return 0;
}