#include <bits/stdc++.h>
using namespace std;
int n, m;
const long long inf = 1e18;
vector<int> G[300006];
long long dp[300006];
vector<int> in[300006], ot[300006];
int w[300006], P[300006];
int L[300006], R[300006], cnt;
void afs(int u, int fa) {
  L[u] = cnt + 1;
  for (auto& t : in[u]) P[t] = ++cnt;
  for (auto& v : G[u])
    if (v != fa) afs(v, u);
  R[u] = cnt;
}
long long T[300006 << 2], lz[300006 << 2];
inline void pu(int rt) { T[rt] = min(T[rt << 1], T[rt << 1 | 1]); }
inline void addit(int rt, long long c) {
  T[rt] = min(T[rt] + c, inf), lz[rt] += c;
}
inline void pd(int rt) {
  if (lz[rt]) {
    addit(rt << 1, lz[rt]), addit(rt << 1 | 1, lz[rt]);
    lz[rt] = 0;
  }
}
void add(int rt, int l, int r, int L, int R, long long c) {
  if (L <= l && R >= r) {
    addit(rt, c);
    return;
  }
  pd(rt);
  int m = l + r >> 1;
  if (L <= m) add(rt << 1, l, m, L, R, c);
  if (R > m) add(rt << 1 | 1, m + 1, r, L, R, c);
  pu(rt);
}
void mdfy(int rt, int l, int r, int p, long long c) {
  if (l == r) {
    T[rt] = c;
    return;
  }
  pd(rt);
  int m = l + r >> 1;
  if (p <= m)
    mdfy(rt << 1, l, m, p, c);
  else
    mdfy(rt << 1 | 1, m + 1, r, p, c);
  pu(rt);
}
long long que(int rt, int l, int r, int L, int R) {
  if (L <= l && R >= r) return T[rt];
  pd(rt);
  int m = l + r >> 1;
  long long mn = inf;
  if (L <= m) mn = min(mn, que(rt << 1, l, m, L, R));
  if (R > m) mn = min(mn, que(rt << 1 | 1, m + 1, r, L, R));
  return mn;
}
void dfs(int u, int fa) {
  long long S = 0;
  for (auto& v : G[u])
    if (v != fa) {
      dfs(v, u);
      S = min(S + dp[v], inf);
    }
  if (u == fa) {
    dp[u] = S;
    return;
  }
  for (auto& x : in[u]) mdfy(1, 1, m, P[x], w[x] + S);
  for (auto& x : ot[u]) mdfy(1, 1, m, P[x], inf);
  for (auto& v : G[u])
    if (v != fa && L[v] <= R[v]) add(1, 1, m, L[v], R[v], S - dp[v]);
  if (L[u] <= R[u])
    dp[u] = que(1, 1, m, L[u], R[u]);
  else
    dp[u] = inf;
}
void solve() {
  cin >> n >> m;
  int u, v;
  for (int i = (2), iend = (n); i <= iend; ++i)
    scanf("%d%d", &u, &v), G[u].push_back(v), G[v].push_back(u);
  for (int i = (1), iend = (m); i <= iend; ++i)
    scanf("%d%d%d", &u, &v, w + i), in[u].push_back(i), ot[v].push_back(i);
  afs(1, 1);
  for (int i = (0), iend = (4 * m); i <= iend; ++i) T[i] = inf;
  dfs(1, 1);
  cout << (dp[1] >= inf ? -1 : dp[1]) << endl;
}
signed main() { solve(); }
