#include<stdio.h>
const int INF=-2000000000;
const int N=100128;
int n,m;
int rez,a[3*N];
int min(int x,int y)
{
if(x>y)
return x;
return y;
}
void update(int poz,int st,int dr,int x,int val)
{
if(st==dr)
{
a[poz]=val;
return;
}
int m=((st+dr)>>1),s=poz<<1,d=s+1;
if(x<=m)
update(s,st,m,x,val);
else
update(d,m+1,dr,x,val);
a[poz]=min(a[s],a[d]);
}
void query(int poz,int st,int dr,int x,int y)
{
if(x<=st && dr<=y)
{
rez= min(rez,a[poz]);
return;
}
int m=(st+dr)>>1,s=poz<<1,d=s+1;
if(x<=m)
query(s,st,m,x,y);
if(m<y)
query(d,m+1,dr,x,y);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int i,a,b,c,l;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&l);
update(1,1,n,i,l);
}
for(i=0;i<m;++i)
{
scanf("%d%d%d",&c,&a,&b);
if(c==0)
update(1,1,n,a,b);
else
{
rez=INF;
query(1,1,n,a,b);
printf("%d\n",rez);
}
}
return 0;
}