#include "cstdio"
#include "algorithm"
using namespace std;
const int NMAX = 100001;
int v[2 * NMAX - 1];
void update(int nod, int lo, int hi, int pos, int val) {
if (lo == hi) {
v[nod] = val;
return;
}
int mid = (lo + hi) / 2;
if (pos <= mid) {
update(nod * 2, lo, mid, pos, val);
} else{
update(nod * 2 + 1, mid + 1, hi, pos, val);
}
v[nod] = max(v[nod * 2], v[nod * 2 + 1]);
}
int query(int nod, int lo, int hi, int start, int finish) {
if (start > hi || lo > finish) {
return -1;
}
if (start <= lo && hi <= finish) {
return v[nod];
}
int mid = (lo + hi) / 2;
return max(
query(nod * 2, lo, mid, start, finish),
query(nod * 2 + 1, mid + 1, hi, start, finish)
);
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int N, M, x;
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; i++) {
scanf("%d", &x);
update(1, 1, N, i, x);
}
int op, a, b;
while (M--) {
scanf("%d%d%d", &op, &a, &b);
if (op == 0) {
int maxim = query(1, 1, N, a, b);
printf("%d\n", maxim);
} else {
update(1, 1, N, a, b);
}
}
return 0;
}