const maxn = 100010;
var arb : array[1..maxn*4+1] of longint;
v : array[1..maxn+1] of longint;
maxim,n,m,a,b,i,x : longint;
f,g : text;
function max(x,y : longint):longint;
begin
if x>y then max:=x else max:=y;
end;
procedure get_max(p,u,nr : longint);
var m : longint;
begin
if (a<=p)and(u<=b) then
maxim:=max(maxim,arb[nr])
else
begin
m:=(p+u)div 2;
if(a<=m)then get_max(p,m,2*nr);
if(b>m)then get_max(m+1,u,2*nr+1);
end;
end;
procedure modify(a,p,u,nr : longint);
var m : longint;
begin
if p=u then arb[nr]:=b
else
begin
m:=(p+u)div 2;
if (a<=m) then modify(a,p,m,2*nr)
else modify(a,m+1,u,2*nr+1);
arb[nr]:=max(arb[2*nr],arb[2*nr+1]);
end;
end;
begin
assign(f,'arbint.in');reset(f);
assign(g,'arbint.out');rewrite(g);
read(f,n,m);
for a:=1 to n do
begin
read(f,b);
modify(a,1,n,1);
end;
for i:=1 to m do
begin
read(f,x,a,b);
if x<>0 then modify(a,1,n,1)
else
begin
maxim:=0;
get_max(1,n,1);
writeln(g,maxim);
end;
end;
close(g);
end.