var v:array[1..400000] of integer;
i,op,rez,n,m,a,b,aux:integer;
f,g:text;
function max(k,l:integer):integer;
begin
if k>=l then
max:=k
else max:=l;
end;
procedure update(nod,inc,sf,poz,val:integer);
var mij:integer;
begin
if (inc=sf) then
v[nod]:=val
else begin
mij:=(inc+sf) div 2;
if (poz<=mij) then
update(2*nod,inc,mij,poz,val)
else update(2*nod+1,mij+1,sf,poz,val);
v[nod]:=max(v[2*nod],v[2*nod+1]);
end;
end;
procedure query(nod,inc,sf,a,b:integer);
var mij:integer;
begin
if (a<=inc) and (sf<=b) then
begin
if (rez<=v[nod]) then
rez:=max(rez,v[nod]);
end
else begin
mij:=(inc+sf) div 2;
if (a<=mij) then
query(2*nod,inc,mij,a,b);
if (mij+1<=b) then
query(2*nod+1,mij+1,sf,a,b);
end;
end;
begin
assign(f,'arbint.in');
assign(g,'arbint.out');
reset(f);
rewrite(g);
readln(f,n,m);
for i:=1 to n do
begin
read(f,aux);
update(1,1,n,i,aux);
end;
for i:=1 to m do
begin
readln(f,op,a,b);
if op=0 then
begin
rez:=-1;
query(1,1,n,a,b);
writeln(g,rez);
end;
if op=1 then
update(1,1,n,a,b);
end;
close(f);
close(g);
end.