#include <cstdio>
#define max(a, b) ((a > b) ? a : b)
int n, m, i, c, x, y, v[262150], max;
void update(int x, int y, int st, int dr, int pos) {
if(st == dr)
v[pos] = y;
else {
int m = (st + dr) / 2;
if(x <= m)
update(x, y, st, m, 2*pos);
else
update(x, y, m+1, dr, 2*pos+1);
v[pos] = max(v[2*pos], v[2*pos+1]);
}
}
void query(int x, int y, int st, int dr, int pos) {
if(st == dr)
max = max(v[pos], max);
else {
int m = (st + dr) / 2;
if(x <= m)
query(x, y, st, m, 2*pos);
if(y > m)
query(x, y, m+1, dr, 2*pos+1);
}
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i = 1; i <= n; ++i) {
scanf("%d", &x);
update(i, x, 1, n, 1);
}
for(i = 1; i <= m; ++i) {
scanf("%d%d%d", &c, &x, &y);
if(c == 0) {
max = -1;
query(x, y, 1, n, 1);
printf("%d\n", max);
}
else
update(x, y, 1, n, 1);
}
}