#include
#include
using namespace std;
void buildTree(int a,int s,int e,int tree,int index){
if(s==e){
tree[index]=a[s];
return;
}
int mid=(s+e)/2;
buildTree(a,s,mid,tree,2index);
buildTree(a,mid+1,e,tree,2index +1);
tree[index]=min(tree[2index],tree[2index+1]);
return;
}
int query(int tree,int ss,int se,int qs,int qe,int index){
if(ss>=qs and se<=qe){
return tree[index];
}
if(qe<ss || qs>se){
return INT_MAX;
}
int mid=(ss+se)/2;
int left=query(tree,ss,mid,qs,qe,2index);
int right=query(tree,mid+1,se,qs,qe,2*index+1);
return min(left,right);
}
void update(int tree,int ss,int se,int x,int y,int index){
if(x>se || x<ss){
return;
}
if(ss==se==x){
tree[index]=y;
return;
}
int mid=(ss+se)/2;
update(tree,ss,mid,x,y,2index+1);
update(tree,mid+1,se,x,y,2index+2);
tree[index]=min(tree[2index],tree[2*index+1]);
}
int main() {
int n,q;
cin>>n>>q;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
int tree=new int[4n+1];
buildTree(a,0,n-1,tree,1);
int x,y,z;
while(q–){
cin>>x>>y>>x;
if(x==1){
cout<<query(tree,0,n-1,y,z,1);
}
if(x==2){
update(tree,0,n-1,x,y,1);
}
}
return 0;
}