#include <stdio.h>
#define max(a, b) (((a) < (b)) ? (b) : (a))
#define MAX 100000
int n, m, t, x, y;
int arb[3 * MAX];
void update(int pos, int l, int r, int x, int y){
if(l == r){
arb[pos] = y;
return;
}
int m = (l + r) / 2;
if(x <= m)
update(2 * pos, l, m, x, y);
else
update(2 * pos + 1, m + 1, r, x, y);
arb[pos] = max(arb[2 * pos], arb[2 * pos + 1]);
}
int query(int pos, int l, int r, int s, int d){
if(s <= l && r <= d)
return arb[pos];
if(r < s || d < l)
return 0;
int m = (l + r) / 2, x = 0, y = 0;
if(s <= m)
x = query(2 * pos, l, m, s, d);
if(m < d)
y = query(2 * pos + 1, m + 1, r, s, d);
return max(x, y);
}
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);
update(1, 1, n, i, x);
}
for(int i = 0; i < m; ++i){
scanf("%d%d%d", &t, &x, &y);
if(t == 1)
update(1, 1, n, x, y);
else
printf("%d\n", query(1, 1, n, x, y));
}
return 0;
}