#include<bits/stdc++.h>
#define LL long long
#define PII pair<int,int>
#define mp make_pair
#define fi first
#define se second
using namespace std;
int n,t,seq[100005][18],dis[100005][18];
int siz[100005],ms[100005],z;
bool vis[100005];
vector<PII> V[100005];
int Q[1000005];
bool cmp(int a,int b){
	for(int i=0;i<18;i++){
		if(seq[a][i]<seq[b][i]) return true;
		if(seq[a][i]>seq[b][i]) return false;
	}
	return false;
}
void d1(int id,int prev){
	siz[id]=1;
	ms[id]=0;
	for(int i=0;i<V[id].size();i++){
		int to=V[id][i].fi;
		if(to!=prev && !vis[to]){
			d1(to,id);
			siz[id]+=siz[to];
			ms[id]=max(ms[id],siz[to]);
		}
	}
	return;
}
void d2(int id,int prev,int tar){
	if(tar>=2*(max(ms[id],tar-siz[id]))) z=id;
	if(z!=-1) return;
	for(int i=0;i<V[id].size();i++){
		int to=V[id][i].fi;
		if(to!=prev && !vis[to]){
			d2(to,id,tar);
		}
	}
	return;
}
void d3(int id,int prev,int lev,int len,int nu){
	dis[id][lev]=len;
	seq[id][lev]=nu;
	for(int i=0;i<V[id].size();i++){
		PII to=V[id][i];
		if(!vis[to.fi] && to.fi!=prev){
			d3(to.fi,id,lev,len+to.se,nu);
		}
	}
	return;
}
void dfs(int id,int prev,int lev){
	d1(id,prev);
	z=-1;
	d2(id,prev,siz[id]);
	int zz=z,num=0;
	vis[zz]=true;
	seq[zz][lev]=0;
	for(int i=0;i<V[zz].size();i++){
		PII to=V[zz][i];
		if(!vis[to.fi]){
			d3(to.fi,zz,lev,to.se,++num);
		}
	}
	for(int i=0;i<V[zz].size();i++){
		if(!vis[V[zz][i].fi]){
			dfs(V[zz][i].fi,zz,lev+1);
		}
	}
	return;
}

LL ans;
void f(int l,int r,int lev){
	if(Q[l]==Q[r]) return;
	for(int i=l;i<=r;i++) ans+=1LL*(r-l)*dis[Q[i]][lev];
	int pv=l;
	LL cdis=dis[Q[l]][lev];
	for(int i=l+1;i<=r;i++){
		if(seq[Q[i]][lev]!=seq[Q[i-1]][lev]){
			ans-=1LL*(i-1-pv)*cdis;
			f(pv,i-1,lev+1);
			pv=i;
			cdis=dis[Q[i]][lev];
		}else cdis+=dis[Q[i]][lev];
	}
	ans-=1LL*(r-pv)*cdis;
	f(pv,r,lev+1);
	return;
}
int main(){
	scanf("%d %d",&n,&t);
	for(int i=1;i<n;i++){
		int a,b,c;
		scanf("%d %d %d",&a,&b,&c);
		V[a].push_back(mp(b,c));
		V[b].push_back(mp(a,c));
	}
	memset(seq,-1,sizeof(seq));
	memset(dis,0,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dfs(1,0,0);
	
	while(t--){
		int sz;
		scanf("%d",&sz);
		for(int i=0;i<sz;i++) scanf("%d",&Q[i]);
		sort(Q,Q+sz,cmp);
		ans=0;
	//	for(int i=0;i<sz;i++) printf("%d%c",Q[i],i==sz-1?'\n':' ');
		f(0,sz-1,0);
		printf("%lld\n",ans);
	}
	return 0;
}