var v:array[1..263000] of longint;
i, m, n, x, y, max, c:longint;
buf1, buf2:array[1..200000] of char;
f, g:text;
function maxim (a, b:longint):longint;
begin if a> b then maxim:=a else maxim := b; end;
procedure repl(k, st, dr:longint);
var mij:longint;
begin
if st = dr then v[k]:=y
else
begin
mij:=(st+dr) div 2;
if x<=mij then repl (k*2, st, mij)
else repl (k*2+1, mij+1, dr);
v[k]:=maxim(v[k*2], v[k*2+1]);
end;
end;
procedure init(k, st, dr:longint);
var mij:longint;
begin
if st = dr then read (f, v[k])
else
begin
mij := (st+dr) div 2;
init(k*2, st, mij);
init(k*2+1, mij+1, dr);
v[k]:=maxim(v[k*2], v[k*2+1]);
end;
end;
procedure find (k, st, dr:longint);
var mij:longint;
begin
if (st>=x) and (dr<=y) then
begin
if v[k]>max then max := v[k];
end
else
begin
mij:= (st+dr) div 2;
if mij >=x then find (k*2, st, mij);
if mij <y then find (k*2+1, mij+1, dr);
end;
end;
begin
assign (f, 'arbint.in'); settextbuf(f, buf1); reset (f);
assign (g, 'arbint.out'); settextbuf (g, buf2); rewrite (g);
read (f, n, m);
init (1, 1, n);
for i := 1 to m do
begin
read (f, c, x, y);
case c of
0:begin
max:=0;
find(1, 1, n);
writeln (g, max);
end;
1:begin
repl(1, 1, n);
end;
end;
end;
close (f); close (g);
end.