#include<stdio.h>
#include<vector>
#define NMAX 200004
using namespace std;
int n,m,arb[2*NMAX],v[NMAX];
int maxim;
int poz;
inline int max( int a, int b){
if(a>b) return a;
return b;
}
int add(int nod, int st, int dr){
if(st==dr){
arb[nod]=v[poz];
}
else{
int mij=(st+dr)/2;
if(poz<=mij)
add(2*nod, st, mij);
else
add(2*nod+1,mij+1, dr);
arb[nod]=max(arb[2*nod], arb[2*nod+1]);
}
}
void max(int nod, int st, int dr, int x, int y){
if(x<=st&&y>=dr)
maxim=max(maxim, arb[nod]);
else{
int mij=(st+dr)/2;
if(y>mij)
max(2*nod+1, mij+1, dr, x , y);
if(x<=mij)
max(2*nod, st, mij, x, y );
}
}
int main(){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d", &n,&m);
for(int i=1;i<=n;i++){
scanf("%d", &v[i]);
poz=i;
add(1,1,n);
}
int op,a,b;
for(int i=1;i<=m;i++){
scanf("%d%d%d", &op,&a,&b);
if(op==0){
maxim=-1;
max(1,1,n,a,b);
printf("%d\n", maxim);
}
else
{
v[a]=b;
poz=a;
add(1,1,n);
}
}
return 0;
}