from sys import stdin, stdout
stdin = open('arbint.in', 'r')
stdout = open('arbint.out', 'w')
n, m = [int(x) for x in stdin.readline().split()]
vec = [0 for i in range(n + 1)]
arb = [0 for i in range(n * 2 + 1)]
j = 0
def build(pos, l, r):
if l == r:
arb[pos] = vec[l]
pass
mid = (l + r) / 2
mid = int(mid)
build(pos * 2, l, mid)
build(pos * 2 + 1, mid + 1, r)
arb[pos] = max(arb[pos * 2], arb[pos * 2 + 1])
def update(pos, l, r, a, b):
if l == r:
arb[pos] = b
pass
mid = (l + r) / 2
mid = int(mid)
if a <= mid:
update(pos * 2, l, mid, a, b)
else:
update(pos * 2 + 1, mid + 1, r, a, b)
arb[pos] = max(arb[pos * 2], arb[pos * 2 + 1])
def query(pos, l, r, a, b):
if a <= l and r <= b:
return arb[pos]
mid = (l + r) / 2;
mid = int(mid)
ans = 0
if a <= mid:
ans = max(ans, query(pos * 2, l, mid, a, b))
if b > mid:
ans = max(ans, query(pos * 2 + 1, mid + 1, r, a, b))
return ans
for i in stdin.readline().split():
j += 1
vec[j] = int(i)
build(1, 1, n)
while(m > 0):
m -= 1
op, a, b = [int(x) for x in stdin.readline().split()]
if op == 0 :
stdout.write(str(query(1, 1, n, a, b)) + '\n')
else:
update(1, 1, n, a, b)
sys.exit()