#include <stdio.h>
#define MAXN 100000
int arb[4 * MAXN + 1], b, c;
int max2(int a, int b){
return a > b ? a : b;
}
int query(int p, int st, int dr){
if(st >= b && dr <= c)
return arb[p];
else{
int m = (st + dr) / 2, max = 0;
if(b <= m && c >= st)
max = max2(max, query(p * 2, st, m));
if(c > m && b <= dr)
max = max2(max, query(p * 2 + 1, m + 1, dr));
return max;
}
}
void update(int p, int st, int dr){
if(st != dr){
int m = (st + dr) / 2;
if(b <= m)
update(p * 2, st, m);
else
update(p * 2 + 1, m + 1, dr);
arb[p] = max2(arb[2 * p], arb[2 * p + 1]);
}
else
arb[p] = c;
}
int main(){
FILE *in = fopen("arbint.in", "r");
FILE *out = fopen("arbint.out", "w");
int n, m, i, a;
fscanf(in, "%d%d", &n, &m);
for(i = 0; i < n; i++){
fscanf(in, "%d", &c);
b = i + 1;
update(1, 1, n);
}
for(i = 0; i < m; i++){
fscanf(in, "%d%d%d", &a, &b, &c);
if(a == 0)
fprintf(out, "%d\n", query(1, 1, n));
else
update(1, 1, n);
}
fclose(in);
fclose(out);
return 0;
}