#include<bits/stdc++.h>
using namespace std;
struct Edge{
int u,v,w;
bool operator <(const Edge& x1){
return w<x1.w;
}
}edge[100010];
int n,p,js,ans,minn=INT_MAX;
int sj[10010];
int fa[10010];
int find(int a){
if(fa[a]!=a)fa[a]=find(fa[a]);
return fa[a];
}
bool check(int a,int b){
return fa[a]==fa[b];
}
void merge(int a,int b){
fa[find(a)]=find(b);
}
int main(){
cin>>n>>p;
for(int i=1;i<=n;i++){
fa[i]=i;
cin>>sj[i];
minn=min(sj[i],minn);
}
for(int i=1;i<=p;i++){
int u,v,w;
cin>>u>>v>>w;
edge[i]=(Edge){u,v,sj[u]+sj[v]+2*w};
}
sort(edge+1,edge+1+p);
for(int i=1;js!=n-1;i++){
int u=edge[i].u,v=edge[i].v,w=edge[i].w;
if(check(u,v)){
continue;
}
merge(u,v);
js++;
ans+=w;
}
cout<<ans+minn;
return 0;
}