aint = []
def update( st, dr, poz, val, i ):
if st == dr:
aint[i] = val
else:
mij = int((st + dr) / 2)
if poz <= mij:
update(st, mij, poz, val, i * 2 + 1)
else:
update(mij + 1, dr, poz, val, i * 2 + 2)
aint[i] = max(aint[i * 2 + 1], aint[i * 2 + 2])
def query( st, dr, a, b, i ):
if a == st and b == dr:
return aint[i]
mij = int((st + dr) / 2)
if b <= mij:
return query( st, mij, a, b, i * 2 + 1 )
elif a > mij:
return query( mij + 1, dr, a, b, i * 2 + 2 )
else:
return max( query( st, mij, a, mij, i * 2 + 1 ),
query( mij + 1, dr, mij + 1, b, i * 2 + 2 ) )
fin = open("arbint.in", "r" )
fout = open("arbint.out", "w")
n,q = map(int, fin.readline().split())
for i in range(4 * n):
aint.append(0)
v = map(int, fin.readline().split())
for i in range(n):
update( 0, n - 1, i, v[i], 0 )
for i in range(q):
a,b,c = map(int, fin.readline().split())
if a == 0:
fout.write( str(query( 0, n - 1, b - 1, c - 1, 0 )) )
else:
update( 0, n - 1, b - 1, c, 0 )