#include <bits/stdc++.h>
using namespace std;
const int len = 100005;
int n, m, x, key, a, b, tree[4 * len];
void update(int val, int pos, int node = 1, int left = 1, int right = n) {
if (left == right) {
tree[node] = val;
return;
}
int mid = (left + right) / 2;
if (pos <= mid)
update(val, pos, node * 2, left, mid);
else
update(val, pos, node * 2 + 1, mid + 1, right);
tree[node] = max(tree[node * 2], tree[node * 2 + 1]);
}
int query(int a, int b, int node = 1, int left = 1, int right = n) {
if (a <= left && right <= b)
return tree[node];
int mid = (left + right) / 2, res = -1;
if (a <= mid)
res = max(res, query(a, b, node * 2, left, mid));
if (mid < b)
res = max(res, query(a, b, node * 2 + 1, mid + 1, right));
return res;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> x;
update(x, i);
}
for (int i = 1; i <= m; i++) {
cin >> key >> a >> b;
if (key)
update(b, a);
else
cout << query(a, b) << "\n";
}
}