program bla;
var f,g:text;
n,m,i,x,pos,val,a,b,start,finish,maxim:longint;
maxarb:array[1..400000] of longint;
function max(a,b:longint):longint;
begin
if a>b then max:=a
else max:=b;
end;
procedure update (nod,left,right:longint);
var jum:longint;
begin
if left=right then
begin
maxarb[nod]:=val;
end
else
begin
jum:=(left+right) div 2;
if pos<=jum then update (2*nod,left,jum)
else update (2*nod+1, jum+1,right);
maxarb[nod]:=max(maxarb[2*nod],maxarb[2*nod+1]);
end;
end;
procedure query (nod,left,right:longint);
var jum:longint;
begin
if (start<=left) and (right<=finish) then
begin
if maxim<maxarb[nod] then maxim:=maxarb[nod];
end
else
begin
jum:=(left+right) div 2;
if start<=jum then query (2*nod,left,jum);
if jum<finish then query (2*nod+1,jum+1,right);
end;
end;
begin
assign (f,'arbint.in'); reset (f);
assign (g,'arbint.out'); rewrite (G);
readln (f,n,m);
for i:=1 to n do
begin
read (f,x);
pos:=i; val:=x;
update (1,1,n);
end;
readln (F);
for i:=1 to m do
begin
read (f,x,a,b);
if x=0 then
begin
maxim:=-1;
start:=a; finish:=b;
query(1,1,n);
writeln (g,maxim);
end
else
begin
pos:=a; val:=b;
update(1,1,n);
end;
end;
close (F); close (G);
end.