program arb_int;
var f,g:text;
n,m:integer;
i,z:integer;
a,b:longint;
v:array[1..300000]of longint;
function maxim(a,b:longint):longint;
begin
maxim:=(a+b+abs(a-b))div 2;
end;
procedure update(n,st,dr,poz:integer;val:longint);
var mij:integer;
begin
if(st=dr)then v[n]:=val
else begin
mij:=(st+dr)div 2;
if poz<=mij then update(2*n,st,mij,poz,val);
if poz>mij then update(2*n+1,mij+1,dr,poz,val);
v[n]:=maxim(v[2*n],v[2*n+1]);
end;
end;
function query(n,st,dr,a,b:integer):longint;
var ll,rr:longint;
mij:integer;
begin
if(a<=st)and(dr<=b)then query:=v[n]
else begin
mij:=(st+dr)div 2;
ll:=0;rr:=0;
if a<=mij then ll:=query(2*n,st,mij,a,b);
if b>mij then rr:=query(2*n+1,mij+1,dr,a,b);
query:=maxim(ll,rr);
end;
end;
procedure citire;
var val:longint;
i:integer;
begin
readln(f,n,m);
for i:=1 to n do begin
read(f,val);
update(1,1,n,i,val);
end;
readln(f);
end;
begin
assign(f,'arbint.in');reset(f);
assign(g,'arbint.out');rewrite(g);
citire;
for i:=1 to m do begin
readln(f,z,a,b);
if(z=1)then update(1,1,n,a,b)
else writeln(g,query(1,1,n,a,b));
end;
close(f);
close(g);
end.