//arbori de intervale
const nmax=100001;
var fi,fo:text;
a,b,i,n,m,x,op,rez,j:longint;
H:array[1..4*nmax]of longint;
function max(a,b:longint):longint;
begin
if a>b then max:=a
else max:=b;
end;
procedure update(c,x,y,poz,val:longint);
var mij:longint;
begin
if x=y then H[c]:=val
else
begin
mij:=(x+y)div 2;
if poz<=mij then
update(2*c,x,mij,poz,val)
else
update(2*c+1,mij+1,y,poz,val);
H[c]:=max(H[2*c],H[2*c+1]);
end;
end;
procedure query(nod,li,lf:longint);
var mij:longint;
begin
if (a<=li)and(lf<=b) then
begin
if rez<H[nod] then rez:=H[nod];
exit;
end;
mij:=(li+lf) div 2;
if a<=mij then query(2*nod,li,mij);
if b>mij then query(2*nod+1,mij+1,lf);
end;
begin
assign(fi,'arbint.in'); reset(fi);
assign(fo,'arbint.out'); rewrite(fo);
read(fi,n,m);
for i:=1 to N do
begin
read(fi,x);
update(1,1,N,i,x);
end;
for i:=1 to m do
begin
read(fi,op,a,b);
if op=0 then
begin
rez:=0;
query(1,1,n);
writeln(fo,rez);
end
else
update(1,1,N,a,b);
end;
close(fi);
close(fo);
end.