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