program arbint;
var
v:array[0..100010]of longint;
stdin,stdout:text;
a,b,x,i,n,m:longint;
start, finish, val, pos, maxim,nr,aux,poz:longint;
arb:array[0..400100]of longint;
s:array[0..1000000]of char;
procedure querry(nod,left,right:longint);
var mid:longint;
begin
if (start<=left) and (right<=finish)then
begin
if ( maxim < arb[nod] )then
maxim := arb[nod];
end
else
begin
mid:=(left+right)div 2;
if (start<=mid)then
querry(2*nod,left,mid);
if (mid<finish)then
querry(2*nod+1,mid+1,right);
end;
end;
procedure update(nod,left,right:longint);
var mid,max:longint;
begin
mid:=(left+right)div 2;
if (left=right)then
begin
arb[nod]:=val;
end
else
begin
if (pos<=mid)then
update(2*nod,left,mid)
else
begin
update(2*nod+1,mid+1,right);
end;
max:=arb[2*nod];
if (arb[2*nod+1]>max)then
max:=arb[2*nod+1];
arb[nod]:=max;
end;
end;
begin
start:=0;finish:=0;pos:=0;val:=0;maxim:=0;
for i:=1 to 400000 do arb[i]:=0;
assign(stdin,'arbint.in');reset(stdin);
assign(stdout,'arbint.out');rewrite(stdout);
read(stdin,n,m);
readln(stdin); nr:=0;
while (not eoln(stdin))do
begin
read(stdin,s[nr]);
inc(nr);
end;
aux:=0;poz:=0;
for i:=0 to nr-1 do
begin
if (s[i]=' ')then
begin
inc(poz);
v[poz]:=aux;
aux:=0;
end
else
aux:=aux*10+ord(s[i])-ord('0');
end;
inc(poz);
v[poz]:=aux;
for i:=1 to n do
begin
pos:=i;
val:=v[i];
update(1,1,n);
end;
for i:=1 to m do
begin
read(stdin,x,a,b);
if (x=0)then
begin
maxim:=-1;
start:=a;
finish:=b;
querry(1,1,n);
writeln(stdout,maxim);
end
else if (x=1)then
begin
pos:=a;
val:=b;
update(1,1,n);
end;
end;
close(stdin);
close(stdout);
end.