var A : array [1..500000] of longint;
m,n,i,j,x,i1,i2,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,poz,x: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,poz,x)
else update(2*ni+1,mij+1,dr,poz,x);
A[ni] := maxim(A[2*ni],A[2*ni+1]);
end;
end;
procedure caut(ni,st,dr,goi,gof: 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,goi,gof);
if (mij<gof) then caut(2*ni+1,mij+1,dr,goi,gof);
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);
update(1,1,n,i,x);
end;
readln(f);
for i := 1 to m do begin
readln(f,x,i1,i2);
if x=0 then begin
max := 0;
caut(1,1,N,i1,i2);
writeln(g,max);
end
else update(1,1,N,i1,i2);
end;
close(f);
close(g);
end.