#include <stdio.h>
#define DIM 2000000
int n,m;
int v[DIM];
int maxim(int a, int b) {
return a>b ? a : b;
}
void update(int st, int dr, int nod, int poz, int val) {
int mij;
if ((st==poz) && (dr==poz)) {
v[nod] = val;
} else {
mij = (st+dr)/2;
if (poz<=mij)
update(st,mij,2*nod,poz,val);
if (poz>mij)
update(mij+1,dr,2*nod+1,poz,val);
v[nod] = maxim(v[2*nod], v[2*nod+1]);
}
}
int query(int st, int dr, int nod, int a, int b) {
int max,x,mij;
if ((a<=st) && (dr<=b)){
return v[nod];
} else {
mij = (st+dr)/2;
max =-1;
if (a<=mij) {
x = query(st, mij, 2*nod, a, b);
max = maxim(max, x);
}
if (b>mij) {
x = query(mij+1,dr, 2*nod+1, a, b);
max = maxim(max, x);
}
return max;
}
}
int main() {
int val,poz,a,b,op,i;
FILE *f = fopen("arbint.in","r");
FILE *g = fopen("arbint.out","w");
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=n;i++) {
fscanf(f,"%d",&val);
update(1,n,1,i,val);
}
for (i=1;i<=m;i++) {
fscanf(f,"%d",&op);
if (op==0) {
fscanf(f,"%d %d",&a, &b);
fprintf(g,"%d\n",query(1,n,1,a,b));
} else {
fscanf(f,"%d %d",&poz, &val);
update(1,n,1,poz,val);
}
}
fclose(g);
fclose(f);
return 0;
}