#include <stdio.h>
#define DIM 200000
int n,m;
int v[DIM];
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] = v[2*nod];
if (v[nod]<v[2*nod+1])
v[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);
if (x>max)
max = x;
}
if (b>mij) {
x = query(mij+1,dr, 2*nod+1, a, b);
if (x>max)
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;
}