#include<algorithm>
#include<stdio.h>
using namespace std;
FILE*f=fopen("arbint.in","r");
FILE*g=fopen("arbint.out","w");
int v[100005],t[500005],n,m,i,p,x,y;
void adaug(int nod, int a, int b, int p) {
int mij=(a+b)/2;
if(a==b) t[nod]=v[p];
else {
if(p<=mij) adaug(2*nod,a,mij,p);
else adaug(2*nod+1,mij+1,b,p);
t[nod]=max(t[2*nod],t[2*nod+1]);
}
}
int interog(int nod, int a, int b, int st, int dr) {
int mij=(a+b)/2,k=0;
if(st<=a&&b<=dr) return t[nod];
else {
if(dr>mij) k=interog(2*nod+1,mij+1,b,st,dr);
if(st<=mij) k=max(k,interog(2*nod,a,mij,st,dr));
return k;
}
}
int main() {
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++) fscanf(f,"%d",&v[i]);
for(i=1;i<=n;i++) adaug(1,1,n,i);
for(i=1;i<=m;i++) {
fscanf(f,"%d%d%d",&p,&x,&y);
if(p==0) fprintf(g,"%d\n",interog(1,1,n,x,y));
else {v[x]=y; adaug(1,1,n,x);}
}
fclose(f); fclose(g);
return 0;
}