program intervallumfa;
var
v:array[1..100000]of longint;
w:array[1..300000] of longint;
f,g:text;
i,n,a,b,m,t,max:longint;
procedure betesz(cs,bal,jobb,i,ertek:longint);
var
kozep:longint;
begin
if bal=jobb
then w[cs]:=ertek
else begin
kozep:=(bal+jobb) div 2;
if i<=kozep then betesz(cs*2,bal,kozep,i,ertek)
else betesz(cs*2+1,kozep+1,jobb,i,ertek);
if w[cs*2]>w[cs*2+1] then w[cs]:=w[cs*2]
else w[cs]:=w[cs*2+1];
end;
end;
function leker(cs,bal,jobb,a,b:longint):longint;
var
kozep,m1,m2:longint;
begin
if (a<=bal) and (jobb<=b)
then leker:=w[cs]
else begin
kozep:=(bal+jobb) div 2;
m1:=0;
m2:=0;
if a<=kozep then m1:=leker(cs*2,bal,kozep,a,b);
if b>=kozep+1 then m2:=leker(cs*2+1,kozep+1,jobb,a,b);
if m1>m2 then leker:=m1
else leker:=m2;
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, v[i]);
betesz(1,1,n,i,v[i]);
end;
for i:=1 to m do
begin
readln(f, t,a,b);
if t=0 then begin
writeln(g,leker(1,1,n,a,b));
end;
if t=1 then betesz(1,1,n,a,b);
end;
close(f);
close(g);
end.