#include <bits/stdc++.h>
using namespace std;
const int maxn = 300100;
const long long inf = 1LL << 60;
int n, m, T, x, y, c[maxn];
int bg[maxn], ed[maxn], w[maxn];
long long dp[maxn], tr[4 * maxn], oth[maxn * 4];
vector<int> g[maxn], add[maxn], del[maxn];
void dfs(int d, int fa) {
  bg[d] = T + 1;
  for (auto& x : add[d]) w[x] = ++T;
  for (auto& v : g[d])
    if (v != fa) dfs(v, d);
  ed[d] = T;
}
void update(int t) {
  tr[t] = min(inf, min(tr[(t << 1)], tr[((t << 1) | 1)]) + oth[t]);
}
void modify(int t, int l, int r, int x, long long v) {
  if (l == r) {
    tr[t] = oth[t] = v;
    return;
  }
  int mid = (l + r) >> 1;
  if (x <= mid)
    modify((t << 1), l, mid, x, v);
  else
    modify(((t << 1) | 1), mid + 1, r, x, v);
  update(t);
}
void modify(int t, int l, int r, int x, int y, long long v) {
  if (x <= l && y >= r) {
    oth[t] = min(inf, oth[t] + v);
    tr[t] = min(inf, tr[t] + v);
    return;
  }
  int mid = (l + r) >> 1;
  if (x <= mid) modify((t << 1), l, mid, x, y, v);
  if (y > mid) modify(((t << 1) | 1), mid + 1, r, x, y, v);
  update(t);
}
long long query(int t, int l, int r, int x, int y) {
  if (y < l || x > r) return inf;
  if (x <= l && y >= r) return tr[t];
  int mid = (l + r) >> 1;
  return min(inf, min(query((t << 1), l, mid, x, y),
                      query(((t << 1) | 1), mid + 1, r, x, y)) +
                      oth[t]);
}
long long solve(int d, int fa) {
  long long all = 0;
  for (auto& v : g[d])
    if (v != fa) {
      all = min(inf, all + solve(v, d));
    }
  if (d == 1) return dp[1] = all;
  for (auto& x : add[d]) modify(1, 1, m, w[x], all + c[x]);
  for (auto& x : del[d]) modify(1, 1, m, w[x], inf);
  for (auto& v : g[d])
    if (v != fa) modify(1, 1, m, bg[v], ed[v], all - dp[v]);
  return dp[d] = query(1, 1, m, bg[d], ed[d]);
}
int main() {
  cin >> n >> m;
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &x, &y);
    g[x].push_back(y);
    g[y].push_back(x);
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", &x, &y, c + i);
    add[x].push_back(i);
    del[y].push_back(i);
  }
  dfs(1, 0);
  solve(1, 0);
  if (dp[1] < inf)
    cout << dp[1];
  else
    cout << -1;
  return 0;
}
