#include <iostream>
#define MAX_N 100100
#define FIN "arbint.in"
#define FOUT "arbint.out"
using namespace std;
int arb[2*MAX_N+1];
int v[MAX_N+1],maxim,n,m;
void get_max(int a,int b,int p,int u,int nr){
if (a<=p && u<=b){
maxim=max(maxim,arb[nr]);
} else {
int m=(p+u)/2;
if (a<=m){get_max(a,b,p,m,2*nr);}
if (b>m){get_max(a,b,m+1,u,2*nr+1);}
}
}
void modify(int a,int p,int u,int nr){
if (p==u){
arb[nr]=v[p];} else {
int m=(p+u)/2;
if (a<=m){modify(a,p,m,2*nr);} else{
modify(a,m+1,u,2*nr+1);}
arb[nr]=max(arb[2*nr],arb[2*nr+1]);
}
}
void iofile(void){
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%d%d",&n,&m);
int x;
for (int i=1;i<=n;i++){
scanf("%d",&v[i]);
modify(i,1,n,1);
}
int a,b;
for (int i=1;i<=n;i++){
scanf("%d%d%d",&x,&a,&b);
if (x){ v[a]=b;
modify(a,1,n,1);} else {
maxim=0;
get_max(a,b,1,n,1);
printf("%d\n",maxim);
}
}
fclose(stdin);
fclose(stdout);
}
int main(void){
iofile();
return 0;
}