n,q = [int(x) for x in input().split()]
array = [int(x) for x in input().split()]
class Node:
def __init__(self, l, r):
self.l = l
self.r = r
self.val = 0
self.next_left = 0
self.next_right = 0
def get_left(self):
return (self.l+self.r)//2
def get_right(self):
return self.get_left()+1
class SegmentTree:
def __init__(self, array):
self.arr = array
self.root = Node(0, len(array) - 1)
self.build_tree(self.root)
def build_tree(self, node):
if (node.l == node.r):
node.val = self.arr[node.l]
return
node.next_left = Node(node.l, node.get_left())
self.build_tree(node.next_left)
node.next_right = Node(node.get_right(), node.r)
self.build_tree(node.next_right)
node.val = min(node.next_left.val, node.next_right.val)
def find_min(self, a, b, node):
if node.l == a and node.r == b:
return node.val
if a <= node.get_left():
res1 = self.find_min(a, min(node.get_left(), b), node.next_left)
else:
res1 = float('inf')
if b >= node.get_right():
res2 = self.find_min(max(node.get_right(), a), b, node.next_right)
else:
res2 = float('inf')
return min(res1, res2)
def update(self, k, u, node):
if node.l == node.r:
node.val = u
return
if k <= node.get_left():
self.update(k, u, node.next_left)
else:
self.update(k, u, node.next_right)
node.val = min(node.next_left.val, node.next_right.val)
st = SegmentTree(array)
solution = []
for _ in range(q):
indic, k, u = [int(x) for x in input().split()]
if indic == 1:
st.update(k-1, u, st.root)
else:
solution.append(st.find_min(k-1, u-1, st.root))
for elt in solution:
print(elt)