#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#define FOR(i,a,b) for(i=a; i<=b; i++)
#define FOR2(i,n) FOR(i,0,n-1)
#define TFOR(i,a,b) for(i=a; i>=b; i--)
#define f first
#define s second
#define all(x) x.begin(),x.end() 
#define MAXN 100005
#define MAXM 200005
#define KOKN 500
using namespace std;
typedef pair < int , long long > pii;
int read(){ int res(0),sign(1); char c;
	while(1){ c = getchar(); if('0' <= c && c <= '9') { res = c - '0'; break; } else if(c == '-') { sign = -1; break; } }
	while(1){ c = getchar(); if('0' <= c && c <= '9') res = res*10 + c - '0'; else break; }
	return res * sign;
}
vector < pii > G[MAXN];
long long sum;
long long H[MAXN] , T[MAXN] , T2[MAXN] , dist[MAXN];
int M,N,Q,S;
int A[MAXN] , B[MAXN] , Log2[MAXM] , parent[MAXN];
int C[MAXN] , D[MAXN] , K[1000005];
int table[MAXM][18];
void init_dfs( int x , int pre )
{
	parent[x] = pre;
	vector < pii > :: iterator it;
	for( it = G[x].begin(); it != G[x].end(); ++it )
		if( it->f != pre )
		{
			dist[it->f] = dist[x] + it->s;
			init_dfs( it->f , x );
		}
}
void numerate()
{
	queue < int > Q;
	vector < pii > :: iterator it;
	Q.push(1);
	int s(0),x;
	while( !Q.empty() )
	{
		x = Q.front(); Q.pop();
		A[x] = ++s;
		B[s] = x;
		for( it = G[x].begin(); it != G[x].end(); ++it )
			if( it->f != parent[x] )
				Q.push(it->f);
	}
}
void dfs_lca( int x , int pre )
{
	vector < pii > :: iterator it;
	table[++M][0] = A[x];
	if( !C[ A[x] ] )
		C[ A[x] ] = M;
	for( it = G[x].begin(); it != G[x].end(); ++it )
		if( it->f != pre )
		{
			dfs_lca( it->f , x );
			table[++M][0] = A[x];
			if( !C[ A[x] ] )
				C[ A[x] ] = M;
		}
}
int find_lca( int a , int b )
{
	a = D[a];
	b = D[b];

	if( a > b ) swap(a,b);

	int t = Log2[b-a+1];
	return B[ min( table[a][t] , table[b-(1<<t)+1][t] ) ];
}
void dfs1( int x , int pre )
{
	vector < pii > :: iterator it;
	for( it = G[x].begin(); it != G[x].end(); ++it )
		if( it->f != pre )
		{
			dfs1( it->f , x );
			T[x] += T[it->f] + it->s * T2[it->f];
			T2[x] += T2[it->f];
		}
	T2[x] += H[x];
}
void dfs2( int x , int pre , long long t )
{
	sum += H[x] * ( t + T[x] );
	vector < pii > :: iterator it;
	for( it = G[x].begin(); it != G[x].end(); ++it )
		if( it->f != pre )
			dfs2( it->f , x , t + it->s * ( S - T2[it->f] ) + T[x] - ( T[it->f] + it->s * T2[it->f] ) );
}
int main()
{
	int a,b,c,i,j;
	N = read(); Q = read();
	FOR(i,1,N-1)
	{
		a = read(); b = read(); c = read();
		G[a].push_back( make_pair( b,c ) );
		G[b].push_back( make_pair( a,c ) );
	}

	init_dfs(1,-1);
	numerate();

	dfs_lca(1,-1);

	FOR(j,1,17)
		FOR(i,1,M)
			table[i][j] = min( table[i][j-1] , ( i + (1<<(j-1)) <= M ) ? table[ i + (1<<(j-1)) ][j-1] : 1000000 );

	a = 0;
	FOR(i,1,M)
		Log2[i] = ( i == ( 1 << a ) ) ? a++ : Log2[i-1];

	FOR(i,1,N)
		D[i] = C[ A[i] ];

	FOR(i,1,Q)
	{
		S = read();
		FOR(j,1,S)
			H[ K[j] = read() ]++;
		sum = 0;
		if( S <= KOKN )
			FOR(a,1,S)
				FOR(b,a+1,S)
				{
					sum += dist[ K[a] ] + dist[ K[b] ] - 2 * dist[ find_lca( K[a] , K[b] ) ];
				}
		else
		{
			dfs1(1,-1);
			dfs2(1,-1,0);
			sum /= 2;
			FOR(j,1,N) T[j] = T2[j] = 0;
		}
		FOR(j,1,S)
			H[ K[j] ] = 0;
		printf("%lld\n" , sum );
	}

	return 0;
}