#include <bits/stdc++.h>
using namespace std;
long long N, M;
vector<pair<long long, pair<long long, long long>>> jv;
long long ct[101010];
long long i, j, ans;
long long mk[101010];
long long gc[101010], ghn[101010], ghnd[101010];
long long gnxt[101010];
long long ggt(long long a) {
  long long aa = a;
  while (gnxt[aa] != aa) {
    aa = gnxt[aa];
  }
  return gnxt[a] = aa;
}
int main() {
  scanf("%lld%lld", &N, &M);
  for (i = 0; i < N; i++) {
    long long x;
    scanf("%lld", &x);
    gnxt[i + 1] = i + 1;
    gc[i + 1] = x;
  }
  for (i = 0; i < M; i++) {
    long long a, b, c;
    scanf("%lld%lld%lld", &a, &b, &c);
    jv.push_back(make_pair(c, make_pair(a, b)));
  }
  sort(jv.begin(), jv.end());
  for (i = 0; i < M; i++) {
    auto ja = jv[i];
    auto jp = ja.second;
    long long a = ggt(jp.first);
    long long b = ggt(jp.second);
    if (a != b) {
      gc[a] += gc[b];
      ghn[a] += ghn[b];
      ghnd[a] += ghnd[b];
      gnxt[b] = a;
    }
    ghnd[a]++;
    if (jv[i].first < gc[a]) {
      ghn[a] = ghnd[a];
    }
  }
  for (i = 0; i < N; i++) {
    long long a = ggt(i + 1);
    if (mk[a] == 0) {
      mk[a] = 1;
      ans += ghnd[a] - ghn[a];
    }
  }
  printf("%lld", ans);
  return 0;
}
