#include <bits/stdc++.h>

#define pii pair<int, int>

#define mp make_pair
#define pb push_back

#define f first
#define s second

using namespace std;

typedef long long ll;
typedef long double ld;

const int MAXN = (int) 1e6 + 7;
const int INF = (int) 1e9 + 7;

map<int, pair<ll, int>> cnt[MAXN];

vector<int> event[MAXN];
vector<pii> gr[MAXN];

ll res[MAXN];

void dfs(int v, int p) {
	for (auto it : event[v])
		++cnt[v][it].s;
	for (auto to : gr[v]) {
		if (to.f != p) {
      dfs(to.f, v);
      if (cnt[v].size() >= cnt[to.f].size()) {
        for (auto it : cnt[to.f]) {
          auto *cur = &cnt[v][it.f];
          int c = it.s.s;
          ll sum = it.s.f + to.s * 1ll * c;
          res[it.f] += c * cur -> f + cur -> s * sum;
          cur -> s += c;
          cur -> f += sum;
        }
      } else {
        for (auto it : cnt[to.f]) {
          auto *cur = &cnt[v][it.f];
          int c = it.s.s;
          ll sum = it.s.f + to.s * 1ll * c;
          res[it.f] += c * cur -> f + cur -> s * sum;
          cur -> s += c;
          cur -> f += sum;
        }
      }
      cnt[to.f].clear();
		}
	}
}

int main() {
  #ifdef LOCAL
  freopen("in", "r", stdin);
  #endif

  int n, t;

	scanf("%d%d", &n, &t);
	for (int i = 1; i < n; ++i) {
		int x, y, c;
		scanf("%d%d%d", &x, &y, &c);
		gr[x].pb(make_pair(y, c));
		gr[y].pb(make_pair(x, c));
	}
	for (int i = 1; i <= t; ++i) {
		int sz;
		scanf("%d", &sz);
		while (sz --> 0) {
			int x;
			scanf("%d", &x);
			event[x].pb(i);
		}
	}
	dfs(1, 0);
	for (int i = 1; i <= t; ++i)
		printf("%lld\n", res[i]);

  return 0;
}