var A : array [1..300000] of longint;
m,n,i,j,x,poz,i1,i2,goi,gof,max : longint;
f,g : text;
function maxim(x,y:longint):longint;
begin
if x>y then maxim := x
else maxim := y;
end;
procedure update(ni,st,dr:longint);
var mij : longint;
begin
if st=dr then A[ni] := x
else begin
mij := (st+dr) div 2;
if poz<=mij then update(2*ni,st,mij)
else update(2*ni+1,mij+1,dr);
A[ni] := maxim(A[2*ni],A[2*ni+1]);
end;
end;
procedure caut(ni,st,dr: longint);
var mij : longint;
begin
if (goi<=st)and(dr<=gof) then
if max<A[ni] then max := A[ni]
else
else
begin
mij := (st+dr) div 2;
if (goi<=mij) then caut(2*ni,st,mij);
if (mij<gof) then caut(2*ni+1,mij+1,dr);
end;
end;
begin
assign(f,'arbint.in');
reset(f);
assign(g,'arbint.out');
rewrite(g);
readln(f,n,m);
for i := 1 to n do begin
read(f,x);
poz := i;
update(1,1,n);
end;
for i := 1 to m do begin
readln(f,x,i1,i2);
if x=0 then begin
max := 0;
goi := i1;
gof := i2;
caut(1,1,N);
writeln(g,max);
end
else begin
poz := i1;
x := i2;
update(1,1,N);
end;
end;
close(f);
close(g);
end.