#include <bits/stdc++.h>
using namespace std;
const int mxn = 2e5 + 5;
struct Data {
  int u, v;
  long long w;
};
int p[mxn], n, m, root;
long long mi = 1e12 + 1, a[mxn];
vector<Data> mst;
bool cmp(Data x, Data y) { return x.w < y.w; }
int Find(int u) { return (p[u] == u ? u : p[u] = Find(p[u])); }
bool Unite(int u, int v) {
  u = Find(u);
  v = Find(v);
  if (u == v) return 0;
  p[v] = u;
  return 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    p[i] = i;
    if (a[i] < mi) mi = a[i], root = i;
  }
  for (int i = 1; i <= n; i++)
    if (i != root) mst.push_back({min(i, root), max(i, root), a[i] + a[root]});
  for (int i = 1; i <= m; i++) {
    int u, v;
    long long w;
    cin >> u >> v >> w;
    if (u > v) swap(u, v);
    mst.push_back({u, v, w});
  }
  sort(mst.begin(), mst.end(), cmp);
  long long res = 0;
  for (Data k : mst)
    if (Unite(k.u, k.v)) res += k.w;
  cout << res;
}
