#include<stdio.h>
#define Max 100000
FILE*f=fopen("arbint.in","r");
FILE*g=fopen("arbint.out","w");
int H[3*Max+3],n,m;
inline int min(int a, int b)
{
if(a>b) return a;
return b;
}
inline void update(int node, int left, int right, int i, int v) //pe pozitia i pun valoarea v
{
if(left>=right) { H[node]=v; return;}
int middle=(left+right)/2;
if(i<=middle) update(2*node, left, middle, i, v);
else update(2*node+1,middle+1,right,i,v);
H[node]=min(H[2*node],H[2*node+1]);
}
inline int query(int node, int left, int right, int i, int j)
{
if(i<=left && j>=right) return H[node];
int middle=(left+right)/2;
int sol=-1;
if(i<=middle) sol=min(sol, query(2*node,left,middle,i,j));
if(j>middle) sol=min(sol, query(2*node+1, middle+1, right, i,j));
return sol;
}
int main()
{
int x,i,a,b;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;++i)
{
fscanf(f,"%d",&x);
update(1,1,n,i,x);
}
while(m--)
{
fscanf(f,"%d%d%d",&x,&a,&b);
if(x==0) fprintf(g,"%d\n",query(1,1,n,a,b));
else update(1,1,n,a,b);
}
return 0;
}