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