Program arbint;
var arb:array [0..450000] of longint;
i,n,m,op,a,b,pos,val,mid,max1:longint;
b1,b2:array [1..1 shl 15] of char;
fi,fo:text;
function max(a,b:longint):longint;
begin
if a>b then max:=a else max:=b;
end;
procedure update(nod,l,r:longint);
begin
if l=r then begin arb[nod]:=val; exit; end;
mid:=(l+r) div 2;
if pos<=mid then update(2*nod,l,mid)
else update(2*nod+1,mid+1,r);
arb[nod]:=max(arb[2*nod],arb[2*nod+1]);
end;
procedure query(nod,l,r:longint);
begin
if (pos<=l) and (r<=val) then begin max1:=max(max1,arb[nod]); exit; end;
mid:=(l+r) div 2;
if pos<=mid then query(2*nod,l,mid) else
if mid<val then query(2*nod+1,mid+1,r);
end;
begin
assign(fi,'arbint.in');
assign(fo,'arbint.out');
settextbuf(fi,b1); settextbuf(fo,b2);
reset(fi); rewrite(fo); readln(fi,n,m);
for i:=1 to n do begin
read(fi,op); pos:=i; val:=op;
update(1,1,n);
end; readln(fi);
for i:=1 to m do begin
readln(fi,op,a,b);
if op=0 then begin max1:=-1; pos:=a; val:=b; query(1,1,n); writeln(fo,max1); end
else begin pos:=a; val:=b; update(1,1,n); end;
end;
close(fo);
end.