#include<bits/stdc++.h>
#define maxn 100111
#define logN 20
using namespace std;


vector < pair< int,int > > adj[maxn];
int f[maxn][logN], depth[maxn], n,t;
vector<int> arr(100002);
void dfs(int u) {
    for (int i = 1; i < logN; i++)
        f[u][i] = f[f[u][i - 1]][i - 1];

    for (int i = 0; i < (int) adj[u].size(); i++) {
        int v = adj[u][i].first;

        if (!depth[v]) {
            f[v][0] = u;
            depth[v] = depth[u] + adj[u][i].second;
            dfs(v);
        }
    }
}

int lca (int u, int v) {
    if (depth[u] < depth[v]) swap(u, v);

    for (int i = logN - 1; i >= 0; i--)
        if (depth[f[u][i]] >= depth[v]) {
            u = f[u][i];
        }

    if (u == v) return u;

    for (int i = logN - 1; i >= 0; i--)
        if (f[u][i] != f[v][i]) {
            u = f[u][i];
            v = f[v][i];
        }

    return f[u][0];
}

int dist (int u, int v) {
    int x = lca(u, v);
    int res = depth[u] + depth[v] - 2 * depth[x];
    return res;
}

int main()
{
    cin >> n;
    cin>>t;
    for (int i = 1; i < n; i++) {
        int u, v,w;
        cin >> u;
        cin>> v;
        cin>> w;
        pair<int,int> p1(v,w);
        pair<int,int> p2(u,w);
        adj[u].push_back(p1);
        adj[v].push_back(p2);
    }
   //memset(f,)
    depth[1] = 1;
    dfs(1);
    while(t--)
   {
    int k;
    cin>>k;
    for(int i=0;i<k;i++)
    cin>>arr[i];
    long long sum=0;
    for(int i=0;i<k-1;i++)
    {
     for(int j=i+1;j<k;j++)
     sum+=(long long)dist(arr[i],arr[j]);
    }
   cout<<sum<<endl;
  }
 return 0;
}