#include<bits/stdc++.h>
using namespace std;
int const MAXSIZE = 40000010;
int arb[MAXSIZE];
int n, m, code, a, b, x, k;
int interval(int a, int b, int node, int l, int r) {
//out << node << " ";
if (a <= l && b >= r)
k = max(k, arb[node]);
else {
int mid = (l + r) / 2;
if (a <= mid)
interval(a, b, node * 2, l, mid);
if (b > mid)
interval(a, b, node * 2 + 1, mid + 1, r);
}
}
int change(int a, int val, int node, int l, int r) {
if (l == r) {
arb[node] = val;
} else {
int mid = (l + r) / 2;
if (a <= mid)
change(a, val, node * 2, l, mid);
if (a > mid)
change(a, val, node * 2 + 1, mid + 1, r);
arb[node] = max (arb[2 * node], arb[2 * node + 1]);
}
}
int main() {
freopen("arbint.in" ,"r",stdin);
freopen("arbint.out" ,"w",stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", &x);
change(i, x, 1, 1, n);
}
for (int i = 1; i <= m; i++) {
scanf("%d %d %d", &code, &a, &b);
if (code == 0) {
k = 0;
interval(a, b, 1, 1, n);
printf("%d \n", k);
} else {
change(a, b, 1, 1, n);
}
}
}