#include <iostream>
#include <stdio.h>
using namespace std;
FILE *f=fopen("hotel.in","r");
FILE *g=fopen("hotel.out","w");
int v[300000],n,p,i,c,a,nr;
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);
if(pf>=m) 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(l==r) mx[nod]
{
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);
update(1,n,1,n,1,1);
for(i=1;i<=p;i++)
{
fscanf(f,"%d",&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:
{
fprintf(g,"%d\n",v[1]);
break;
}
}
}
fclose(g);
return 0;
}