#include<stdio.h>
using namespace std;
#define dim 1000000
long q[65],a[dim],v[dim],x,y,mij,max,n,m,w[dim],b[dim],aa,bb;
int caut_bin(long in, long sf)
{
mij=(in+sf)/2;
if(v[mij]==x) return mij;
else if(v[mij]>x) caut_bin(in,mij);
else caut_bin(v[mij],sf);
}
int caut_bin2 (long z)
{
long inceput=1,sfarsit=n,mij,nr=n+1;
while (inceput<=sfarsit)
{mij=inceput+(sfarsit-inceput)/2;
if(v[mij]>=x)
{
nr=mij;
sfarsit=mij-1;
}
else
inceput=mij+1;
}
return nr;
}
int caut_bin3 (long z)
{
long inceput=1,sfarsit=n,mij,nr=n+1;
while (inceput<=sfarsit)
{mij=inceput+(sfarsit-inceput)/2;
if(v[mij]<=y)
{
nr=mij;
inceput=mij+1;
}
else
sfarsit=mij-1;
}
return nr;
}
void merge_sort(long li,long ls)
{
long j,i,k,jum,m=0;
if(li==ls) return;
jum=(li+ls)/2;
merge_sort(li,jum);
merge_sort(jum+1,ls);
i=li;j=jum+1;k=li;
while((i<=jum)||(j<=ls))
{
if(j>ls || ( (i<=jum) && (v[i] < v[j])) )
{
w[k] = v[i]; m++; b[k]=a[i];
k++;
i++;
}
else
{
w[k] = v[j]; m++; b[k]=a[j];
k++;
j++;
}
}
for(i = ls; i >= li; i--)
{
v[i] = w[i]; a[i]=b[i];
}
}
int main()
{long i,ok,j;
FILE *f=fopen("marbles.in","r"), *g=fopen("marbles.out","w");
fscanf(f,"%ld%ld",&n,&m);
for(i=1;i<=n;i++)
{
fscanf(f,"%ld%ld",&x,&y);
v[i]=x;
a[i]=y;
}
merge_sort(1,n);
for(i=1;i<=m;i++)
{
fscanf(f,"%ld%ld%ld",&ok,&x,&y);
if(ok==0)
{
caut_bin(1,n);
v[mij]=mij+y;
merge_sort(1,n);
}
else
{
max=0;
aa=caut_bin2(x);
bb=caut_bin3(y);
for(j=aa;j<=bb;j++)
if((v[j]>=x)&&(v[j]<=y))
{
q[ a[j] ]++;
if(q[ a[j] ]>max)
max=q[ a[j] ];
if(v[j]>y) break;
}
fprintf(g,"%ld\n",max);
for(j=1;j<=y;j++)
q[ a[j] ]=0;
}
}
fclose(f);
fclose(g);
return 0;}