#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5;
int N, Q;
int seg[4 * MAXN];
int update(int x, int l, int r, int val, int p) {
if (p < l || p > r) {
return seg[x];
}
if (l == r) {
return seg[x] = val;
}
int md = (l + r) / 2;
return seg[x] = max(update(2 * x, l, md, val, p), update(2 * x + 1, md + 1, r, val, p));
}
int query(int x, int l, int r, int L, int R) {
if (r < L || R < l) {
return 0;
}
if (L <= l && r <= R) {
return seg[x];
}
int md = (l + r) / 2;
return max(query(2 * x, l, md, L, R), query(2 * x + 1, md + 1, r, L, R));
}
int main() {
ifstream cin("arbint.in");
ofstream cout("arbint.out");
cin >> N >> Q;
for (int i = 1; i <= N; i++) {
int x;
cin >> x;
update(1, 1, N, x, i);
}
while (Q--) {
int t, x, y;
cin >> t >> x >> y;
if (t == 0) {
cout << query(1, 1, N, x, y) << '\n';
}
else {
update(1, 1, N, y, x);
}
}
}