program arbint;
const nmax=100000;
inf=1 shl 30;
var v:array[1..10*nmax] of longint;
n,m,op,a,b,val,i,j,max:longint;
bufin,bufout:array[1..1 shl 16] of char;
function maxim(a,b:longint):longint;
begin
if a>b then maxim:=a else maxim:=b;
end;
procedure Actualizare(nod,st,dr,poz,val:longint);
var mij:longint;
begin
if st=dr then v[nod]:=val
else begin
mij:=(st+dr)div 2;
if poz<=mij then Actualizare(2*nod,st,mij,poz,val)
else Actualizare(2*nod+1,mij+1,dr,poz,val);
v[nod]:=maxim(v[2*nod],v[2*nod+1]);
end;
end;
procedure Interogare(nod,st,dr,a,b:longint);
var mij:longint;
begin
if (a<=st)and(dr<=b)then max:=maxim(max,v[nod])
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(input,'arbint.in');
assign(output,'arbint.out');
settextbuf(input,bufin);
settextbuf(output,bufout);
reset(input);
rewrite(output);
readln(n,m);
for i:=1 to n do begin
read(a);
Actualizare(1,1,n,i,a);
end;
for i:=1 to m do
begin
readln(op,a,b);
if op=0 then begin
max:=-inf;
interogare(1,1,n,a,b);
writeln(max);
end
else
Actualizare(1,1,n,a,b);
end;
close(output);
end.