#include <stdio.h>
#include <stdlib.h>
#define N 100010
#define CUL 64
struct bila{
int coord,culoare;
};
struct bila v[N];
int n;
//cautare binara (poz inc,poz sf,valoare,tip(pt mai mic=>1,pt mai mare =>3))
int binary_search(int p, int u, int val, int tip){
int m=17;
while (p<u){
m=(p+u)/2;
if (v[m].coord<val)
p=m+1;
else if (v[m].coord==val)
return m;
else
u=m;
}
if (tip==1)
if (v[m].coord>val)
--m;
if (tip==3)
if (v[m].coord<val)
++m;
return m;
}
void exchange(int i,int j){
int pivot,z,y;
struct bila aux;
/*if (j>0){
z=binary_search(0,n-1,i+j,1);
pivot=binary_search(0,n-1,i,2);
aux.coord=v[i].coord;
aux.culoare=v[i].culoare;
if (z>pivot){
for (y=z;y>pivot;--y){
v[y-1].culoare=v[y].culoare;
v[y-1].coord=v[y].coord;
}
v[z].culoare=v[pivot].culoare;
v[z].coord=v[pivot].coord;
}
if (z==pivot)
v[pivot].coord+=j;
}
if (j<0){
z=binary_search(0,n-1,i+j,3);
pivot=binary_search(0,n-1,4,2);
//printf("%d %d\n",z,pivot);
aux.coord=v[pivot].coord;
aux.culoare=v[pivot].culoare;
if (z<pivot){
for (y=z;y<pivot;++y){
v[y+1].culoare=v[y].culoare;
v[y+1].coord=v[y].coord;
}
v[z].culoare=v[pivot].culoare;
v[z].coord=v[pivot].coord;
}
if (z==pivot)
v[pivot].coord+=j;
}*/
z=binary_search(0,n-1,i,2);
v[z].coord+=j;
}
void inter(int i,int j){
int a,b,ct,max=0;
int c[CUL+1];
for (ct=1;ct<=CUL;++ct)
c[ct]=0;
a=binary_search(0,n-1,i,3);
b=binary_search(0,n-1,i+j,1);
for (ct=a;ct<=b;++ct)
++c[v[ct].culoare];
for (ct=1;ct<=CUL;++ct)
if (c[ct]>max)
max=c[ct];
printf("%d\n",max);
}
void scan(){
int i,tip,ii,jj,m;
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=0;i<n;++i)
scanf("%d%d",&v[i].coord,&v[i].culoare);
for (i=0;i<m;++i){
scanf("%d%d%d",&tip,&ii,&jj);
if (tip==0){
exchange(ii,jj);
}
else{
inter(ii,jj);
}
}
}
void end(){
fclose(stdin);
fclose(stdout);
}
int main(){
scan();
end();
return 0;
}