#include <bits/stdc++.h>
using namespace std;
inline int read() {
  register int x = 0, t = 1;
  register char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') t = -1, ch = getchar();
  while (ch <= '9' && ch >= '0') x = x * 10 + ch - 48, ch = getchar();
  return x * t;
}
int n, m, top, first[301000], dep[301000];
struct mona {
  int nxt, en;
} s[301000 << 1];
inline void Insert(int x, int y) {
  s[++top] = (mona){first[x], y}, first[x] = top;
}
inline void Dfs(int k, int fa) {
  dep[k] = dep[fa] + 1;
  for (register int i = first[k]; i; i = s[i].nxt) {
    int en = s[i].en;
    if (en == fa) continue;
    Dfs(en, k);
  }
  return;
}
int cnt, rt[301000], Min[301000], ls[301000], rs[301000];
pair<long long, int> val[301000];
long long lz[301000], ans;
inline int New(pair<long long, int> x) {
  int t = ++cnt;
  val[t] = x, Min[t] = 1;
  return t;
}
inline void Pushlz(int x, long long w) { val[x].first += w, lz[x] += w; }
inline void Pushdown(int x) {
  if (!lz[x]) return;
  if (ls[x]) Pushlz(ls[x], lz[x]);
  if (rs[x]) Pushlz(rs[x], lz[x]);
  lz[x] = 0;
}
inline int Merge(int u, int v) {
  if (!u || !v) return u | v;
  int t;
  if (val[u] < val[v])
    Pushdown(u), rs[u] = Merge(rs[u], v), t = u;
  else
    Pushdown(v), rs[v] = Merge(u, rs[v]), t = v;
  if (Min[ls[t]] < Min[rs[t]]) swap(ls[t], rs[t]);
  Min[t] = Min[rs[t]] + 1;
  return t;
}
inline void Dfs2(int k, int fa) {
  for (register int i = first[k]; i; i = s[i].nxt) {
    int en = s[i].en;
    if (en == fa) continue;
    Dfs2(en, k), rt[k] = Merge(rt[k], rt[en]);
  }
  while (rt[k] && val[rt[k]].second >= dep[k])
    rt[k] = Merge(ls[rt[k]], rs[rt[k]]);
  if (!rt[k] && k != 1) puts("-1"), exit(0);
  ans += val[rt[k]].first, Pushlz(rt[k], -val[rt[k]].first);
}
int main() {
  n = read(), m = read();
  for (register int i = 1; i < n; ++i) {
    int x = read(), y = read();
    Insert(x, y), Insert(y, x);
  }
  Dfs(1, 0);
  for (register int i = 1; i <= m; ++i) {
    int x = read(), y = read();
    long long w = read();
    if (dep[x] < dep[y]) swap(x, y);
    rt[x] = Merge(rt[x], New(make_pair(w, dep[y])));
  }
  Dfs2(1, 0), printf("%lld\n", ans);
}
