//Marbles
#include <fstream>
#include <algorithm>
#include <iostream>
using namespace std;
struct Citire{
int c;
int p;
};
int Ordine(Citire i,Citire j){
return (i.p<j.p);
}
int A[65][100011];
char dbg;
int Cautare (int p,int u,int el){
// fprintf(stdout,"%d ",el); cin>>dbg;
if (p>u) return -1;
int m=(p+u)/2;
if (el==A[0][m]) return m;
if (el<A[0][m]) return Cautare(p,m-1,el);
return Cautare(m+1,u,el);
}
int Cautare2 (int p, int u, int el){
// fprintf(stdout,"p= %d u=%d el=%d",p,u,el); cin>>dbg;
if (p>u) return -1;
int m=(p+u)/2;
// fprintf(stdout,"A[0][m]= %d %d",A[0][m],A[0][m+1]); cin>>dbg;
if (A[0][m]<=el&&el<A[0][m+1]) return m;
if (el<A[0][m]) return Cautare2(p,m-1,el);
return Cautare2(m+1,u,el);
}
int main(){
Citire B[100001];
ifstream fin("marbles.in");
ofstream fout("marbles.out");
int i,j,C,n,m,nr,x,y,St,Sf,Max;
fin>>n>>m;
for (i=1;i<=n;i++){
fin>>B[i].p>>B[i].c;
}
sort(B+1,B+n+1,Ordine);
for (i=1;i<=n;i++){
A[0][i]=B[i].p;
A[B[i].c][i]=1;
for (j=1;j<=64;j++)
A[j][i]+=A[j][i-1];
}
A[0][0]=-214748364;
A[0][n+1]=214748364;
for (j=1;j<=m;j++){
fin>>C>>x>>y;
// St=Cautare(1,n,x);
if (C==0){
St=Cautare(1,n,x);
A[0][St]=x+y;
}
if (C==1){
Max=-10000;
St=Cautare2(0,n+1,x);
Sf=Cautare2(0,n+1,x+y);
if (A[0][St]!=x) St++;
// fprintf(stdout,"ST SF %d %d \n",St,Sf); cin>>dbg;
for (i=1;i<=64;i++)
if (A[i][Sf]-A[i][St-1]>Max)
Max=A[i][Sf]-A[i][St-1];
fout<<Max<<'\n';
}
// fout<<St<<' ';
}
// fout<<'\n';
// for (i=1;i<=n;i++) fout<<A[0][i]<<' ';
fout.close();
return 0;
}