#include <stdio.h>
#define DIM 200009
int v[DIM];
int n,m,i,a,b,x1,y1,x,op;
void update(int nod, int poz, int value, int st, int dr){
if ((st==poz) && (dr==poz)) {
v[nod] = value;
} else {
int m=(st+dr)/2;
if (m>=poz) update(2*nod,poz,value,st,m);
if (m+1<=poz) update(2*nod+1,poz,value,m+1,dr);
if (v[2*nod]>v[2*nod+1]) v[nod] = v[2*nod];
else v[nod] = v[2*nod+1];
}
}
int query(int nod, int a, int b, int st, int dr) {
if ((st>=a) && (dr<=b))
return v[nod];
int m = (st+dr)/2;
int max1=-1;
int max2=-1;
if (m>=a) max1 = query(2*nod,a,b,st,m);
if (b>=m+1) max2 = query(2*nod+1,a,b,m+1,dr);
if (max1>max2) return max1;
else return max2;
}
int main(){
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",&x);
update(1,i,x,1,n);
}
for (i=1;i<=m;i++) {
fscanf(f,"%d",&op);
if (op==1) {
fscanf(f,"%d %d", &a, &b);
update(1,a,b,1,n);
} else {
fscanf(f,"%d %d",&a, &b);
int Temp = query(1,a,b,1,n);
fprintf(g,"%d\n", Temp);
}
}
fclose(f);
fclose(g);
return 0;
}