#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n,m,cw[N],fa[N],ans=2147483647,k,cnt;
struct ys{
int a,b,ds;
}aa[N*2];
#define Int register int
inline int in(){
int s=0,w=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)){s=(s<<3)+(s<<1)+(ch^48);ch=getchar();}
return w*s;
}
bool mcmp(ys x,ys y){
return x.ds<y.ds;
}
int fd(Int x){
//if(fa[x]!=x)fa[x]=fd(fa[x]);
//return x;
if(fa[x]==x)return x;
return fa[x]=fd(fa[x]);
}
void he(Int x,Int y){
Int fx=fd(x),fy=fd(y);
if(fx!=fy) fa[fx]=fy;
}
int main(){
freopen("P2916_1.in","r",stdin);
freopen("P2916.out","w",stdout);
n=in();m=in();
for(Int i=1;i<=n;i++)cw[i]=in(),fa[i]=i,ans=min(ans,cw[i]);
for(Int i=1;i<=m;i++){
aa[++k].a=in();aa[k].b=in();aa[k].ds=in();
aa[k].ds=(aa[k].ds<<1)+cw[aa[k].a]+cw[aa[k].b];
aa[++k].a=aa[k-1].b;aa[k].b=aa[k-1].a;aa[k].ds=aa[k-1].ds;
}
sort(aa+1,aa+k+1,mcmp);
for(Int i=1;i<=k;i++){
Int u=aa[i].a,v=aa[i].b;
if(fd(u)!=fd(v)){
he(u,v);ans+=aa[i].ds;cnt++;
}
if(cnt==(n-1))break;
}
printf("%d\n",ans);
return 0;
}