#include<stdio.h>
const int N=100010;
int n,v[10*N],poz,val,a,b;
void maxim(int nod,int p,int u){
if(p==u)
{
v[nod]=val;
return;
}
int m=(p+u)/2;
if(poz<=m)
maxim(2*nod,p,m);
else
maxim(2*nod+1,m+1,u);
if(v[2*nod]>v[2*nod+1])
v[nod]=v[2*nod];
else
v[nod]=v[2*nod+1];
}
int intreb(int nod,int p,int u){
if(a<=p && u<=b)
return v[nod];
int m=(p+u)/2;
int x=0,y=0;
if(m>=a)
x=intreb(2*nod,p,m);
if(m+1<=b)
y=intreb(2*nod+1,m+1,u);
if(x>y)
return x;
return y;
}
void calcul(){
int tip,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&val);
poz=i;
maxim(1,1,n);
}
while(m--){
scanf("%d%d%d",&tip,&a,&b);
if(tip==0)
printf("%d\n",intreb(1,1,n));
else{
poz=a;
val=b;
maxim(1,1,n);
}
}
}
int main(){
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
calcul();
return 0;
}