#include <cstdio>
#include <cstring>
#define INF (~(1<<31))
#define MAX(a,b) ((a<b)? (b): (a))
int N, M, maxim;
int a[400000];
void add(int nod, int st, int dr, int poz, int val) {
if (st == dr) {
a[nod] = val;
return;
} 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] = MAX(a[nod*2],a[nod*2+1]);
}
}
void cautare(int nod, int st, int dr, int A, int B) {
if (A<=st && dr<=B) {
maxim = MAX(maxim, a[nod]);
return;
} else {
int mij = (st+dr)/2;
if (A<=mij)
cautare(nod*2, st, mij, A, B);
if (B>mij)
cautare(nod*2+1, mij+1, dr, A, B);
}
}
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) {
maxim = -INF;
cautare(1, 1, N, poz, val);
printf("%d\n", maxim);
} else
add(1, 1, N, poz, val);
}
return 0;
}