#include <bits/stdc++.h>
using namespace std;
const long long N = 300073;
char buf[1000000], *p1, *p2;
inline char gc() {
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1000000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline long long rd() {
  register long long f = 0;
  register char c = gc();
  while (c < 48 || c > 57) c = gc();
  while (c > 47 && c < 58) f = f * 10 + (c ^ 48), c = gc();
  return f;
}
vector<long long> g[N];
long long rt[N], dep[N], cover[N], top[N], ans;
inline void swap(long long &x, long long &y) { x ^= y, y ^= x, x ^= y; }
struct LeftistHeap {
  long long ls[N], rs[N], dis[N], val[N], tag[N];
  inline long long &operator[](long long x) { return val[x]; }
  inline void update(long long x, long long d) { val[x] -= d, tag[x] += d; }
  inline void pushdown(long long x) {
    update(ls[x], tag[x]), update(rs[x], tag[x]), tag[x] = 0;
  }
  inline long long merge(long long x, long long y) {
    if (!x || !y) return x | y;
    pushdown(x), pushdown(y);
    if (val[x] > val[y]) swap(x, y);
    rs[x] = merge(rs[x], y);
    if (dis[ls[x]] < dis[rs[x]]) swap(ls[x], rs[x]);
    dis[x] = dis[rs[x]] + 1;
    return x;
  }
  inline void pop(long long x) {
    pushdown(rt[x]), rt[x] = merge(ls[rt[x]], rs[rt[x]]);
  }
} heap;
void dfs(long long x, long long f) {
  dep[x] = dep[f] + 1;
  for (auto y : g[x])
    if (y != f)
      dfs(y, x), rt[x] = heap.merge(rt[x], rt[y]), cover[x] += cover[y];
  if (!cover[x] && x > 1) printf("-1\n"), exit(0);
  while (dep[top[rt[x]]] >= dep[x]) heap.pop(x);
  if (rt[x]) ans += heap[rt[x]], heap.update(rt[x], heap[rt[x]]);
}
signed main() {
  register long long n = rd(), m = rd(), i, x, y;
  for (i = 1; i < n; ++i)
    x = rd(), y = rd(), g[x].push_back(y), g[y].push_back(x);
  for (i = 1; i <= m; ++i)
    x = rd(), y = rd(), heap[i] = rd(), ++cover[x], --cover[y], top[i] = y,
    rt[x] = heap.merge(rt[x], i);
  dfs(1, 0), printf("%I64d\n", ans);
  return 0;
}
