#include <bits/stdc++.h>
using namespace std;
const int maxn = (3e5) + 10, mod = 1e9 + 7;
int n, m, pnt[maxn], w[maxn], h[maxn], sz[maxn];
long long int ans, lazy[maxn];
vector<int> v[maxn], wa[maxn];
bool beband = 0;
multiset<pair<long long int, int> > s[maxn], cop;
void pre_DFS(int x, int p) {
  sz[x] = 1;
  pnt[x] = 0;
  for (auto u : v[x]) {
    if (u == p) continue;
    h[u] = h[x] + 1;
    pre_DFS(u, x);
    sz[x] += sz[u];
    if (sz[u] > sz[pnt[x]]) pnt[x] = u;
  }
  if (!pnt[x]) pnt[x] = x;
}
void warn(int x, int p) {
  w[x] = h[x];
  for (auto u : v[x])
    if (u != p) warn(u, x);
  for (auto u : wa[x]) w[x] = min(w[x], h[u]);
  for (auto u : v[x]) {
    if (u == p) continue;
    w[x] = min(w[x], w[u]);
    if (w[u] > h[x]) beband = 1;
  }
}
void mer(int a, int b, int hh) {
  if (!(int)s[a].size()) return;
  auto x = *s[a].begin();
  while (x.second > hh) {
    s[a].erase(s[a].find(x));
    if (!(int)s[a].size()) return;
    x = *s[a].begin();
  }
  if (!(int)s[a].size()) return;
  long long int res = x.first - lazy[a];
  ans += res;
  while ((int)s[a].size()) {
    auto y = *s[a].begin();
    s[b].insert(make_pair(y.first - res - lazy[a] + lazy[b], y.second));
    s[a].erase(s[a].find(y));
  }
}
void rel(int a, int hh) {
  if (!(int)s[a].size()) return;
  auto x = *s[a].begin();
  while (x.second > hh) {
    s[a].erase(s[a].find(x));
    if (!(int)s[a].size()) return;
    x = *s[a].begin();
  }
  if (!(int)s[a].size()) return;
  int res = x.first - lazy[a];
  ans += res;
  lazy[a] += res;
}
void mm(int a, int b) {
  while (s[a].size()) {
    auto x = *s[a].begin();
    s[a].erase(s[a].find(x));
    x.first = x.first - lazy[a] + lazy[b];
    s[b].insert(x);
  }
}
void DFS(int x, int p) {
  for (auto u : v[x])
    if (u != p) DFS(u, x);
  int pn = pnt[pnt[x]];
  if (pnt[x] != x) rel(pn, h[x]);
  for (auto u : v[x]) {
    if (u == p) continue;
    if (pnt[x] == u) continue;
    mer(pnt[u], pn, h[x]);
  }
  if (x != pn) mm(x, pn);
  pnt[x] = pnt[pnt[x]];
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    v[x].push_back(y);
    v[y].push_back(x);
  }
  pre_DFS(1, -1);
  for (int i = 1; i <= m; i++) {
    int x, y, c;
    scanf("%d%d%d", &x, &y, &c);
    if (h[x] > h[y]) swap(x, y);
    wa[y].push_back(x);
    s[y].insert(make_pair(c, h[x]));
  }
  warn(1, -1);
  if (beband) {
    printf("-1");
    return 0;
  }
  DFS(1, -1);
  printf("%lld\n", ans);
  return 0;
}
