#include <stdio.h>
int tree[400001],max=-1;
int det_max(int node , int a , int b , int st , int dr){
// if(a==b){
// if(tree[node]>max)
// max = tree[node];
// }
// else{
// int mij = (a+b)/2;
// det_max(2*node,a,mij);
// det_max(2*node+1,mij+1,b);
// }
int x=0,y=0;
if(a <= st && b >=dr){
return tree[node];
}
else{
int mij=(st+dr)/2;
if(a<=mij)
x=det_max(2*node,a,b,st,mij);
if(b>=mij+1)
y=det_max(2*node+1,a,b,mij+1,dr);
return x>y?x:y;
}
}
void change(int node, int pos , int b , int st, int dr){
if(st == dr)
tree[node] = b;
else{
int mid = (st+dr)/2;
if(pos<=mid)
change(2*node,pos,b,st,mid);
else
change(2*node+1,pos,b,mid+1,dr);
tree[node] = tree[2*node] > tree[2*node+1] ? tree[2*node] : tree[2*node+1];
}
}
int main(){
int op,a,b,n,m;
freopen("arbint.in" , "r" , stdin);
freopen("arbint.out" , "w" , stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d" , &a);
change(1,i,a,1,n);
}
for(int i=0;i<m;i++){
if(scanf("%d %d %d" , &op,&a,&b)!=3)
perror("Nu e bine boss");
if(op == 0){
printf("%d\n" , det_max(1,a,b,1,n));
}
else
change(1,a,b,1,n);
}
return 0;
}