#include <bits/stdc++.h>

#define pb push_back
#define all(x) (x).begin(), (x).end()

#ifdef KAZAR
  #define eprintf(...) fprintf(stderr,__VA_ARGS__)
#else
  #define eprintf(...) 0
#endif

using namespace std;

template<class T> inline void umax(T &a,T b){if(a < b) a = b;}
template<class T> inline void umin(T &a,T b){if(a > b) a = b;}
template<class T> inline T abs(T a){return a > 0 ? a : -a;}

typedef long long ll;
typedef pair<int, int> ii;
typedef vector<int> vi;

const int inf = 1e9 + 143;
const ll longinf = 1e18 + 143;

inline int read(){int x;scanf(" %d",&x);return x;}

const int N = 1e5 + 100;

vector<ii> g[N];
vi tasks[N];

int d[N], sz[N];
bool was[N];
vi vs;

void dfs(int u,int p) {
  vs.pb(u);
  sz[u] = 1;
  for (auto e : g[u]) {
    int v = e.first;
    if (v != p && !was[v]) {
      d[v] = d[u] + e.second;
      dfs(v, u);
      sz[u] += sz[v];
    }
  }
}

int best(int u,int p,int all) {
  for (auto e : g[u]) {
    int v = e.first;
    if (v != p && !was[v] && sz[v] * 2 > all) {
      return best(v, u, all);
    }
  }
  return u;
}

ll res[N];
ll sum[N];
int cnt[N];

void calc(int sgn) {
  for (int x : vs) {
    for (int id : tasks[x]) {
      sum[id] = cnt[id] = 0;
    }
  }
  for (int x : vs) {
    for (int id : tasks[x]) {
      res[id] += sgn * (sum[id] + (ll)cnt[id] * d[x]);
      sum[id] += d[x];
      cnt[id] += 1;
    }
  }
}

void solve(int u) {
  vs.clear();
  dfs(u, -1);
  u = best(u, -1, sz[u]);
  vs.clear();
  d[u] = 0;
  dfs(u, -1);
  calc(+1);
  for (auto e : g[u]) {
    int v = e.first;
    int c = e.second;
    if (was[v])
      continue;
    vs.clear();
    d[v] = c;
    dfs(v, u);
    calc(-1);
  }
  was[u] = true;
  for (auto e : g[u]) {
    int v = e.first;
    if (!was[v]) {
      solve(v);
    }
  }
}

int main(){

#ifdef KAZAR
  freopen("f.input","r",stdin);
  freopen("f.output","w",stdout);
  freopen("error","w",stderr);
#endif

  int n = read();
  int t = read();

  for (int i = 0; i < n - 1; i++) {
    int a = read() - 1;
    int b = read() - 1;
    int c = read();
    g[a].pb({b, c});
    g[b].pb({a, c});
  }

  for (int i = 0; i < t; i++) {
    int k = read();
    for (int j = 0; j < k; j++) {
      int u = read() - 1;
      tasks[u].pb(i);
    }
  }

  solve(0);

  for (int i = 0; i < t; i++) {
    printf("%lld\n", res[i]);
  }

  return 0;
}