#include <cstdio>
using namespace std;
int N, M;
int A[100001];
int ai[700001];
int c, a, b;
int recalc(int a, int b, int poz) {
if(a == b)
return ai[poz] = A[a];
else {
int x, y;
x = recalc(a, (a + b) / 2, poz * 2);
y = recalc((a + b) / 2 + 1, b, poz * 2 + 1);
return ai[poz] = (x > y ? x : y);
}
}
int change(int a, int b, int x, int tow, int poz) {
if(a == b) {
ai[poz] = tow;
return tow;
}
int tmp, tmp2, med;
med = (a + b) / 2;
if(x > med) {
tmp = change(med + 1, b, x, tow, 2 * poz + 1);
tmp2 = ai[2 * poz];
} else {
tmp = change(a, med, x, tow, 2 * poz);
tmp2 = ai[2 * poz + 1];
}
if(tmp > tmp2)
ai[poz] = tmp;
else ai[poz] = tmp2;
return ai[poz];
}
int query(int a, int b, int st, int dr, int poz) {
int rez, x, y;
if(st == dr)
return ai[poz];
if(a <= st && b >= dr)
return ai[poz];
int med;
med = (st + dr) / 2;
rez = 0;
if(a <= med) {
x = query(a, b, st, med, 2 * poz);
if(x > rez)
rez = x;
}
if(b > med) {
y = query(a, b, med + 1, dr, 2 * poz + 1);
if(y > rez)
rez = y;
}
return rez;
}
int main() {
int i, j;
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d %d", &N, &M);
for(i = 1; i <= N; i++)
scanf("%d", &A[i]);
recalc(1, N, 1);
for(i = 1; i <= M; i++) {
scanf("%d %d %d", &c, &a, &b);
if(c == 1) {
change(1, N, a, b, 1);
} else {
printf("%d\n", query(a, b, 1, N, 1));
}
}
return 0;
}