var v:array[1..20000000] of longint;
f,g:text;
i,j,max,x,n,m,w,a,b:longint;
procedure actualizare(nod,st,dr,a,b:longint);
var mij,d1,d2:longint;
begin
if (a<=st) and (dr<=b) then v[nod]:=x else
begin
mij:=(st+dr) div 2;
if a<=mij then actualizare(nod*2,st,mij,a,b);
if b> mij then actualizare(nod*2+1,mij+1,dr,a,b);
d1:=v[nod*2]; d2:=v[nod*2+1];
if d1>d2 then v[nod]:=d1 else v[nod]:=d2;
end;
end;
procedure interogare(nod,st,dr,a,b:longint);
var mij:longint;
begin
if (a<=st) and (dr<=b) then
begin
if max<v[nod] then max:=v[nod];
end else
begin
mij:=(st+dr) div 2;
if (a<=mij) then interogare(2*nod,st,mij,a,b);
if (b>mij) then interogare(2*nod+1,mij+1,dr,a,b);
end;
end;
begin
assign(f,'arbint.in'); reset(f);
assign(g,'arbint.out'); rewrite(g);
readln(f,n,m);
{for i:=1 to 2*n do v[i]:=0;}
for i:=1 to n do
begin
read(f,x);
actualizare(1,1,n,i,i);
end;
readln(f);
for j:=1 to m do
begin
readln(f,w,a,b);
if w=0 then begin
max:=0;
interogare(1,1,n,a,b);
writeln(g,max);
end else
begin
i:=a; x:=b;
actualizare(1,1,n,i,i);
end;
end;
close(f); close(g);
end.