#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  int f = 0;
  x = 0;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar()) f |= (ch == '-');
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  if (f) x = -x;
}
void GG() { puts("-1"), exit(0); }
void clear(set<pair<int, long long> > &s) {
  set<pair<int, long long> > t;
  swap(s, t);
}
const long long inf = 1e18;
const int N = 300005;
int d[N], n, m, a, b, c;
vector<pair<int, int> > q[N];
set<pair<int, long long> > s[N];
long long f[N], add[N];
vector<int> e[N];
void pre(int u, int fa) {
  for (auto v : e[u])
    if (v != fa) d[v] = d[u] + 1, pre(v, u);
}
void ins(int d, long long w, set<pair<int, long long> > &s) {
  pair<int, long long> t = make_pair(d, 0);
  set<pair<int, long long> >::iterator it = s.lower_bound(t), it2;
  if (it != s.end() && it->second <= w) return;
  if (it == s.end() || it->first > d) {
    if (it == s.begin()) {
      s.insert(make_pair(d, w));
      return;
    }
    it--;
  }
  while (it->second >= w) {
    int flag = (it == s.begin());
    it2 = it;
    if (!flag) it2--;
    s.erase(it);
    if (flag) break;
    it = it2;
  }
  s.insert(make_pair(d, w));
}
void merge(set<pair<int, long long> > &s, set<pair<int, long long> > &t,
           long long &a, long long &b) {
  if (t.size() > s.size()) swap(s, t), swap(a, b);
  for (auto x : t) ins(x.first, x.second + b - a, s);
  clear(t);
}
void dfs(int u, int fa) {
  long long sum = 0;
  for (auto v : e[u])
    if (v != fa) {
      dfs(v, u);
      sum += f[v];
    }
  for (auto t : q[u]) ins(t.first, t.second + sum, s[u]);
  for (auto v : e[u])
    if (v != fa) {
      add[v] += sum - f[v];
      merge(s[u], s[v], add[u], add[v]);
    }
  while (s[u].size() && n - s[u].begin()->first >= d[u])
    s[u].erase(s[u].begin());
  if (!fa) {
    f[u] = sum;
    return;
  }
  if (s[u].size())
    f[u] = add[u] + s[u].begin()->second;
  else
    GG();
}
int main() {
  read(n), read(m);
  for (int i = (1); i <= (n - 1); i++) {
    read(a), read(b);
    e[a].push_back(b), e[b].push_back(a);
  }
  d[1] = 1, pre(1, 0);
  for (int i = (1); i <= (m); i++) {
    read(a), read(b), read(c);
    q[a].push_back(make_pair(n - d[b], c));
  }
  dfs(1, 0);
  printf("%lld\n", f[1]);
  return 0;
}
