type bila=record
x:longint;
cul:longint;
end;
var a,b:array[1..100001] of bila;
f,g:text;
w,e,apar,schimb,n,m,i,j,op,max,x1,x2:longint;
ap:array[0..65] of longint;
procedure inter(st,dr,mij:longint);
var i,j,t,k:longint;
begin
for i:=st to dr do
b[i]:=a[i];
i:=st;
j:=mij+1;
k:=st;
while (i<=mij) and (j<=dr) do begin
if (b[i].x<b[j].x) then begin
a[k]:=b[i];
inc(i);
end
else begin
a[k]:=b[j];
inc(j);
end;
inc(k);
end;
for t:=i to mij do
a[t+k-i]:=b[t];
for t:=j to dr do
a[t+k-j]:=b[t];
end;
procedure merge(st,dr:longint);
var mij:longint;
begin
if st<dr then begin
mij:=(st+dr) shr 1;
merge(st,mij);
merge(mij+1,dr);
inter(st,dr,mij);
end;
end;
function cauta1(st,dr:longint):longint;
var mij:longint;
begin
if st<=dr then begin
mij:=(st+dr) shr 1;
if (a[mij].x>=w) and ((a[mij-1].x<w) or (mij=1)) then
cauta1:=mij
else
if a[mij].x<w then
cauta1:=cauta1(mij+1,dr)
else
cauta1:=cauta1(st,mij-1);
end
else
cauta1:=0;
end;
function cauta2(st,dr:longint):longint;
var mij:longint;
begin
if st<=dr then begin
mij:=(st+dr) shr 1;
if (a[mij].x<=e) and ((a[mij+1].x>e) or (mij=n)) then
cauta2:=mij
else
if a[mij].x>e then
cauta2:=cauta2(st,mij-1)
else
cauta2:=cauta2(mij+1,dr);
end
else
cauta2:=0;
end;
function cauta(st,dr:longint):longint;
var mij:longint;
begin
if st<=dr then begin
mij:=(st+dr) shr 1;
if a[mij].x=w then
cauta:=mij
else
if a[mij].x<w then
cauta:=cauta(mij+1,dr)
else
cauta:=cauta(st,mij-1);
end;
end;
begin
assign(f,'marbles.in'); reset(f);
assign(g,'marbles.out'); rewrite(g);
read(f,n,m);
for i:=1 to n do
read(f,a[i].x,a[i].cul);
merge(1,n);
for i:=1 to m do begin
read(f,op);
if op=0 then begin
read(f,w,schimb);
schimb:=schimb+w;
apar:=cauta(1,n);
a[apar].x:=schimb;
end
else begin
read(f,w,e);
for j:=1 to 64 do
ap[j]:=0;
x1:=cauta1(1,n);
x2:=cauta2(1,n);
for j:=x1 to x2 do
inc(ap[a[j].cul]);
max:=0;
for j:=1 to 64 do
if ap[j]>max then
max:=ap[j];
writeln(g,max);
end;
end;
close(f); close(g);
end.