#include <cstdio>
#include <algorithm>
using namespace std;
int aint[400004], ans;
void update(int nod, int st, int dr, int i, int p) {
if(st == dr) {
aint[nod] = p;
return ;
}
int med = (st + dr) / 2;
if(i <= med)
update(nod * 2, st, med, i, p);
else
update(nod * 2 + 1, med + 1, dr, i, p);
aint[nod] = max(aint[nod * 2], aint[nod * 2 + 1]);
}
void query(int nod, int st, int dr, int x, int y) {
if(x <= st && dr <= y) {
ans = max(ans, aint[nod]);
return ;
}
int med = (st + dr) / 2;
if( x <= med)
query(nod * 2, st,med,x,y);
if( y >= med + 1)
query(nod * 2 + 1, med+1,dr,x,y);
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int n, m, x, y, t;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++ i) {
scanf("%d", &x);
update(1, 1, n, i, x);
}
for(int i = 1; i <= m; ++ i) {
scanf("%d%d%d", &t, &x, &y);
if(t == 0) {
ans = 0;
query(1,1,n,x,y);
printf("%d\n", ans);
} else {
update(1,1,n,x,y);
}
}
return 0;
}