#include<bits/stdc++.h>
using namespace std;
void tree_build(int node, int start, int end, int ar[], int st[]){
if(start == end){
st[node] = ar[start];
}
else{
int mid = (end+start) /2;
tree_build(2*node+1,start,mid,ar,st);
tree_build(2*node+2,mid + 1,end,ar,st);
st[node] = min(st[2*node+1],st[2*node + 2]);
}
}
int tree_query(int node, int left, int right, int st[], int start, int end) {
if (right < start || left > end) {
return (INT32_MAX);
}
if (left <= start && right >= end) {
return st[node];
}
int mid = (end + start) / 2;
int temp1 = tree_query(2 * node + 1, left, right, st, start, mid);
int temp2 = tree_query(2 * node + 2, left, right, st, mid + 1, end);
int ans = min(temp1, temp2);
return ans;
}
void update_tree(int node, int start, int end, int index, int val, int st[],int ar[]){
if(start == end){
ar[index] = val;
st[node] = val;
}
else{
int mid = (end + start )/2;
if(start <= index && index <= mid){
update_tree(2*node + 1, start, mid, index,val,st, ar);
}
else{
update_tree(2*node+2,mid+1,end,index,val,st,ar);
}
st[node] = min(st[2*node+1], st[2*node+2]);
}
}
int main(){
int n,q;
cin>>n>>q;
int ar[n];
for(int i=0;i<n;i++){
cin>>ar[i];
}
int segmentTree[2*n - 1];
tree_build(0,0,n-1,ar,segmentTree);
while(q--){
char x; int y,z;
cin>>x>>y>>z;
if(x == 'q'){
cout<<tree_query(0,y-1,z-1,segmentTree,0,n-1)<<endl;
} else{
update_tree(0,0,n-1,y-1,z,segmentTree,ar);
}
}
return 0;
}