# include <cstdio>
# include <algorithm>
using namespace std;
FILE *fin = fopen("arbint.in", "rt");
FILE *fout = fopen("arbint.out", "wt");
const int MAXN = 100010;
int Arb[4*MAXN];
int n, m, tmp, x, y;
int query(int nod, int st, int dr, int i, int j) {
if (i <= st && j >= dr)
return Arb[nod];
int mid, in1, in2, fiu;
mid = st + (dr-st)/2;
fiu = (nod << 1);
in1 = in2 = 0;
if (i <= mid)
in1 = query(fiu, st, mid, i, j);
if (mid < j)
in2 = query(fiu+1, mid+1, dr, i, j);
return max(in1, in2);
}
void update(int nod, int st, int dr, int i, int j) {
if (st >= i && dr <= i)
Arb[nod] = j;
else {
int mid = st + (dr-st)/2,
f1 = (nod << 1),
f2 = f1 + 1;
if (i <= mid)
update(f1, st, mid, i, j);
else
update(f2, mid+1, dr, i, j);
Arb[nod] = max(Arb[f1], Arb[f2]);
}
}
int main() {
fscanf(fin, "%d%d", &n, &m);
for (int i=1; i<=n; ++i) {
fscanf(fin, "%d", &x);
update(1, 1, n, i, x);
}
for (int i=1; i<=m; ++i) {
fscanf(fin, "%d%d%d", &tmp, &x, &y);
if (tmp == 0)
fprintf(fout, "%d\n", query(1, 1, n, x, y));
else
update(1, 1, n, x, y);
}
return 0;
}