var n,m,i,a,b,c:longint;
v:array[1..100000] of longint;
d:array[1..300000] of longint;
function creare(nod,st,dr:longint):longint;
var m,k,p:longint;
begin
if st=dr then begin
creare:=st;
d[nod]:=st;
end
else begin
m:=(st+dr) div 2;
k:=creare(nod*2, st, m);
p:=creare(nod*2+1, m+1, dr);
if v[k]>v[p] then begin
d[nod]:=k;
creare:=k;
end else begin
creare:=p;
d[nod]:=p;
end;
end;
end;
function interogare(nod,st,dr,a,b:longint):longint;
var m,k,p:longint;
begin
if (a<=st) and (b>=dr) then
interogare:=d[nod]
else begin
m:=(st+dr) div 2;
if a<=m then k:=interogare(nod*2,st,m,a,b);
if b>m then p:=interogare(nod*2+1,m+1,dr,a,b);
if v[k]>v[p] then interogare:=k else interogare:=p;
end;
end;
//function actualizare(nod,st,dr,a:longint):longint;
//var m,k:longint;
//begin
// if (a=st) and (a=dr) then begin
// d[nod]:=a;
// actualizare:=a;
// end else begin
// m:=(st+dr) div 2;
// if a<=m then begin
// k:=actualizare(nod*2,st,m,a);
// actualizare:=k;
// if v[k]>v[d[nod]] then d[nod]:=k;
// end else begin
// k:=actualizare(nod*2+1,m+1,dr,a);
// actualizare:=k;
// if v[k]>v[d[nod]] then d[nod]:=k;
// end;
// end;
//end;
begin
assign(input,'arbint.in');
assign(output,'arbint.out');
reset(input);
rewrite(output);
read(n,m);
for i:=1 to n do read(v[i]);
creare(1,1,n);
// for i:=1 to n*3 do write(d[i], ' ');
for i:=1 to m do begin
read(c,a,b);
if c=0 then
writeln(v[interogare(1,1,n,a,b)])
else begin
v[a]:=b;
// actualizare(1,1,n,a);
creare(1,1,n);
end;
end;
end.