const nmax=300001;
var f,g:text;
v:array[1..nmax]of longint;
max,pc,uc,a,m,l,nod,poz,b,n,i,j,x:longint;
function maxim(a,b:longint):longint;
begin
if a>b then maxim:=a
else maxim:=b;
end;
procedure actualizare(nod,st,dr:longint);
var mij:longint;
begin
if st=dr then
begin
v[nod]:=x;
end
else
begin
mij:=(st+dr)div 2;
if poz<=mij then actualizare(2*nod,st,mij)
else actualizare(2*nod+1,mij+1,dr);
v[nod]:=maxim(v[2*nod],v[2*nod+1]);
end;
end;
procedure caut(nod,st,dr:longint);
var mij:longint;
begin
if (pc<=st) and (dr<=uc) then
begin
if max<v[nod] then max:=v[nod];
end
else
begin
mij:=(st+dr)div 2;
if (pc<=mij) then caut(2*nod,st,mij);
if (mij<uc) then caut(2*nod+1,mij+1,dr);
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);
poz:=i;
actualizare(1,1,n);
end;
for i:=1 to m do
begin
readln(f,x,a,b);
if x=1 then
begin
poz:=a;
x:=b;
actualizare(1,1,n);
end
else
begin
max:=0;
pc:=a;
uc:=b;
caut(1,1,n);
writeln(g,max);
end;
end;
close(g);
end.