#!/usr/bin/env python3
import sys
sys.stdout = open('arbint.out', 'w')
with open('arbint.in', 'r') as f:
readInts = lambda: map(int, f.readline().split())
N, M = tuple(readInts())
T = [0] * (2 * N + 100)
def update(i, val, idx=1, l=1, r=N):
if l == r == i:
T[idx] = val
else:
m = l + (r - l) // 2
if l <= i <= m:
update(i, val, idx * 2, l, m)
else:
update(i, val, idx * 2 + 1, m + 1, r)
T[idx] = max(T[idx * 2], T[idx * 2 + 1])
def query(ql, qr, idx=1, l=1, r=N):
if ql <= l and qr >= r:
return T[idx]
else:
m, mx = l + (r - l) // 2, 0
if ql <= m:
mx = query(ql, qr, idx * 2, l, m)
if qr > m:
mx = max(mx, query(ql, qr, idx * 2 + 1, m + 1, r))
return mx
for i, x in enumerate(readInts()):
update(i + 1, x)
for _ in range(M):
op = tuple(readInts())
if op[0] == 0:
print(query(op[1], op[2]))
elif op[0] == 1:
update(op[1], op[2])