type bile_de_la_stele=record
x:longint;
c:byte;
end;
var a,tmp:array[0..100001] of bile_de_la_stele;
b:array[0..100000,1..64]of longint;
c:array[1..64] of byte;
f,g:text;
nrc,max,nr1,nr2,ID,ii,jj,k,i,j,m,n:longint;
procedure sort(si,sj:longint);
var nr,m,i,j:longint;
begin
if si<sj then begin
m:=(si+sj) div 2;
sort(si,m);
sort(m+1,sj);
i:=si;
j:=m+1;
nr:=0;
while(i<=m) and (j<=sj) do
if a[i].x<a[j].x then begin
inc(nr);
tmp[nr]:=a[i];
inc(i);
end
else begin
inc(nr);
tmp[nr]:=a[j];
inc(j);
end;
while i<=m do begin
inc(nr);
tmp[nr]:=a[i];
inc(i);
end;
while j<=sj do begin
inc(nr);
tmp[nr]:=a[j];
inc(j);
end;
for i:=1 to nr do
a[si+nr-1]:=tmp[nr];
end;
end;
procedure searchbin(si,sj,src:longint; var ret:longint);
var m:longint;
begin
if si<=sj then begin
m:=(si+sj) div 2;
if (a[m-1].x<src) and (src<=a[m].x) then
ret:=m
else begin
searchbin(si,m-1,src,ret);
searchbin(m+1,sj,src,ret);
end;
end;
end;
procedure searchbin2(si,sj,src:longint; var ret:longint);
var m:longint;
begin
if si<=sj then begin
m:=(si+sj) div 2;
if (a[m].x<=src) and (src<a[m+1].x) then
ret:=m
else begin
searchbin2(si,m-1,src,ret);
searchbin2(m+1,sj,src,ret);
end;
end;
end;
begin
assign(f,'marbles.in');
assign(g,'marbles.out');
reset(f);
rewrite(g);
read(f,n,m);
a[0].x:=-maxlongint;
a[n+1].x:=maxlongint;
nrc:=0;
for i:=1 to n do begin
read(f,a[i].x,a[i].c);
if c[a[i].c]=0 then begin
inc(nrc);
c[a[i].c]:=nrc;
end;
a[i].c:=c[a[i].c];
end;
sort(1,n);
for i:=1 to n do begin
for j:=1 to nrc do
b[i,j]:=b[i-1,j];
inc(b[i,a[i].c]);
end;
for k:=1 to m do begin
read(f,ID,ii,jj);
if ID=0 then begin
searchbin(1,n,ii,nr1);
a[nr1].x:=ii+jj;
end;
if ID=1 then begin
searchbin(1,n,ii,nr1);
searchbin2(1,n,jj,nr2);
max:=0;
for i:=1 to nrc do
if max<b[nr2,i]-b[nr1-1,i] then
max:=b[nr2,i]-b[nr1-1,i];
writeln(g,max);
end;
end;
close(f);
close(g);
end.