#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef long long ll;

struct c{
	int cid,d,h;
};
vector<c> cs[101010];
vector<pair<int, int> > g[101010];

int del[101010];

int aps[101010];

void caps(int x, int p){
	aps[x]=0;
	if (del[x]){
		return;
	}
	aps[x]=1;
	for (auto nx:g[x]){
		if (nx.F!=p){
			caps(nx.F, x);
			aps[x]+=aps[nx.F];
		}
	}
}

int f=0;

void dfs1(int x, int p, int n){
	if (del[x]) return;
	int ma=n-aps[x];
	for (auto nx:g[x]){
		if (nx.F!=p){
			dfs1(nx.F, x, n);
			ma=max(ma, aps[nx.F]);
		}
	}
	if (ma<=n/2){
		f=x;
	}
}

int findc(int x){
	caps(x, 0);
	f=x;
	dfs1(x, 0, aps[x]);
	return f;
}

int ces=1;
int hs=1;

void dfs2(int x, int p, int h, int c, int d){
	if (del[x]) return;
	cs[x].push_back({c, d, h});
	for (auto nx:g[x]){
		if (nx.F!=p){
			dfs2(nx.F, x, h, c, d+nx.S);
		}
	}
}

void calc(int x){
	int tc=ces++;
	cs[x].push_back({tc, 0, hs++});
	for (auto nx:g[x]){
		dfs2(nx.F, x, hs++, tc, nx.S);
	}
}

void goc(int x){
	x=findc(x);
	calc(x);
	del[x]=1;
	for (auto nx:g[x]){
		if (!del[nx.F]){
			goc(nx.F);
		}
	}
}

int hh[10101010];
int cc[10101010];

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n,t;
	cin>>n>>t;
	for (int i=0;i<n-1;i++){
		int a,b,c;
		cin>>a>>b>>c;
		g[a].push_back({b, c});
		g[b].push_back({a, c});
	}
	goc(1);
	for (int i=0;i<t;i++){
		int k;
		cin>>k;
		vector<int> ks(k);
		for (int j=0;j<k;j++){
			cin>>ks[j];
			for (auto c:cs[ks[j]]){
				hh[c.h]++;
				cc[c.cid]++;
			}
		}
		ll v=0;
		for (int j=0;j<k;j++){
			for (auto c:cs[ks[j]]){
				v+=(ll)cc[c.cid]*(ll)c.d;
				v-=(ll)hh[c.h]*(ll)c.d;
			}
		}
		for (int j=0;j<k;j++){
			for (auto c:cs[ks[j]]){
				hh[c.h]--;
				cc[c.cid]--;
			}
		}
		cout<<v<<'\n';
	}
}