#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 10;
const int MN = 3e5 + 10;
int n, q;
vector<int> adj[MN];
vector<pair<int, int> > worker[MN];
multiset<pair<int, long long> > bag[MN];
multiset<long long> Mn[MN];
long long dp[MN], lz[MN];
int h[MN];
void input() {
  scanf("%d%d", &n, &q);
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    --a, --b;
    adj[a].push_back(b), adj[b].push_back(a);
  }
  for (int i = 0; i < q; ++i) {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    --a, --b;
    if (a != b) worker[a].push_back(make_pair(b, c));
  }
}
void dfs(int s, int pr) {
  int big = n;
  long long sm = 0;
  for (int i = 0; i < ((int)(adj[s]).size()); ++i) {
    int v = adj[s][i];
    if (v == pr) continue;
    h[v] = h[s] + 1;
    dfs(v, s);
    if (((int)(bag[big]).size()) < ((int)(bag[v]).size())) big = v;
    sm += dp[v];
  }
  if (big != n) {
    bag[s].swap(bag[big]);
    Mn[s].swap(Mn[big]);
    lz[s] = sm - dp[big] + lz[big];
    while (!bag[s].empty() && bag[s].rbegin()->first > h[pr]) {
      Mn[s].erase(Mn[s].find(bag[s].rbegin()->second));
      bag[s].erase(--(bag[s].end()));
    }
  }
  for (int i = 0; i < ((int)(worker[s]).size()); ++i)
    if (h[worker[s][i].first] <= h[pr]) {
      bag[s].insert(
          make_pair(h[worker[s][i].first], worker[s][i].second + sm - lz[s]));
      Mn[s].insert(worker[s][i].second + sm - lz[s]);
    }
  for (int i = 0; i < ((int)(adj[s]).size()); ++i) {
    int v = adj[s][i];
    if (v == pr || v == big) continue;
    for (auto t : bag[v])
      if (t.first <= h[pr]) {
        bag[s].insert(
            make_pair(t.first, t.second + lz[v] + sm - dp[v] - lz[s]));
        Mn[s].insert(t.second + lz[v] + sm - dp[v] - lz[s]);
      }
  }
  if (Mn[s].empty()) printf("-1\n"), exit(0);
  dp[s] = *Mn[s].begin() + lz[s];
}
void solve() {
  long long ans = 0;
  for (int i = 0; i < ((int)(adj[0]).size()); ++i) {
    int v = adj[0][i];
    h[v] = 1;
    dfs(v, 0);
    ans += dp[v];
  }
  printf("%I64d\n", ans);
}
int main() {
  ios_base ::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  input();
  solve();
  return 0;
}
