#include <stdio.h>
#include <algorithm>
using namespace std;
int n, m, i, j, ok, x, y, u, u1, u2, maxim, c;
int v[100010][70];
struct bila{
int x, y;
} a[100010];
bool cmp(const bila &x, const bila &y){
return x.x<y.x;
}
int cb(int p, int u, int x) {
int m;
while (p<=u) {
m = (p+u)/2;
if(a[m].x==x)
return m;
if(a[m].x<x)
p = m+1;
else
u = m-1;
}
}
int cb1(int p, int u, int x){
int m;
while (p<=u) {
m = (p+u)/2;
if(a[m].x==x)
return m;
if(a[m].x<x)
p = m+1;
else
u = m-1;
}
return p;
}
int cb2(int p, int u, int x){
int m;
while (p<=u) {
m = (p+u)/2;
if(a[m].x==x)
return m;
if(a[m].x<x)
p = m+1;
else
u = m-1;
}
return u;
}
int main(){
freopen("marbles.in", "r", stdin);
freopen("marbles.out", "w", stdout);
scanf("%d %d", &n, &m);
for(i=1; i<=n; i++)
scanf("%d %d", &a[i].x, &a[i].y);
sort(a+1, a+n+1, cmp);
for(i=1; i<=n; i++)
{
for(j=1; j<65; j++)
v[i][j]=v[i-1][j];
v[i][ a[i].y ]++;
}
/*for(j=1; j<65; j++)
{
for(i=1; i<=n; i++)
printf("%d ", v[i][j]);
printf("\n");
}*/
for(i=1; i<=m; i++)
{
scanf("%d %d %d", &ok, &x, &y);
if(ok==0)
{
u=cb(1, n, x);
// if (u==0)
// continue;
a[u].x=x+y;
}
else
{
u1=cb1(1, n, x);
u2=cb2(1, n, y);
maxim=0;
u1--;
for(j=1; j<65; j++)
{
c=v[u2][j]-v[u1][j];
if(c>maxim)
maxim=c;
}
printf("%d\n", maxim);
}
}
return 0;
}