#include <cstdio>
#include <cstring>
#define INF (~(1<<31))
int N, M;
int a[400000];
void add(int nod, int st, int dr, int poz, int val) {
if (st == dr) {
a[nod] = val;
} else {
int mij = (st+dr)/2;
if (poz <= mij)
add(nod*2, st, mij, poz, val);
else
add(nod*2+1, mij+1, dr, poz, val);
a[nod] = (a[nod*2]>a[nod*2+1])? a[nod*2]: a[nod*2+1];
}
}
int cautare(int nod, int st, int dr, int A, int B) {
if (A<=st && dr<=B) {
return a[nod];
} else {
int mij = (st+dr)/2;
int x = -INF, y = -INF;
if (A<=mij)
x = cautare(nod*2, st, mij, A, B);
if (B>mij)
y = cautare(nod*2+1, mij+1, dr, A, B);
return (x>y)? x: y;
}
}
int main () {
freopen("arbint.in","rt",stdin);
freopen("arbint.out","wt",stdout);
memset(a, -INF, sizeof(a));
scanf("%d %d\n", &N, &M);
for (int i=1, x; i<=N; ++i) {
scanf("%d ", &x);
add(1,1,N,i,x);
}
for (int tip, poz, val;M;--M) {
scanf("%d %d %d\n", &tip, &poz, &val);
if (tip == 0)
printf("%d\n", cautare(1, 1, N, poz, val));
else
add(1, 1, N, poz, val);
}
return 0;
}