#include <bits/stdc++.h>
using namespace std;

#define fru(j,n) for(int j=0; j<(n); ++j)
#define tr(it,v) for(auto it=(v).begin(); it!=(v).end(); ++it)
#define x first
#define y second
#define pb push_back
#define mp make_pair
#define ALL(G) (G).begin(),(G).end()

typedef long long ll;
typedef double D;
typedef pair<int,int> pii;
typedef pair<int,ll> pil;
typedef pair<int,pil> PIL;
typedef vector<int> vi;

const int inft = 1000000009;
const int MAXN = 1000006;

vector<pii> V[MAXN];
set<PIL > S[MAXN];
int przen[MAXN];
long long ans[MAXN];
void DFS(int u,int s){
//	printf("jestem w %d\n",u);
	tr(itv,V[u])if(itv->x!=s){
		DFS(itv->x,u);
		//merge two sets;
#define S1 S[itv->x]
#define S2 S[u]
#define P1 przen[itv->x]
#define P2 przen[u]
		P1+=itv->y;
		if(S1.size()>S2.size()){
			swap(S1,S2);
			swap(P1,P2);
		}
		//merge S1 into S2;
		tr(it,S1){
			//search for corr item in S2
			auto it2=S2.lower_bound(make_pair(it->x,pil(-1,-1)));	
			if(it2==S2.end() || it2->x!=it->x){
				PIL ns=*it;
				ns.y.y+=1LL*(P1-P2)*ns.y.x;
			//	printf("u= %d dorzucam (%d,%d,%lld)\n",u,ns.x,ns.y.x,ns.y.y);
				S2.insert(ns);
			}
			else{
			//	printf("u= %d lacze (%d,%d,%lld) z (%d,%d,%lld)\n",u,it->x,it->y.x,it->y.y,it2->x,it2->y.x,it2->y.y);
				ans[it->x]+=1LL*it2->y.x*(it->y.y+1LL*it->y.x*P1);//cost
				ans[it->x]+=1LL*it->y.x*(it2->y.y+1LL*it2->y.x*P2);
				PIL ns=*it2;
				S2.erase(it2);
				ns.y.x+=it->y.x;
				ns.y.y+=it->y.y+1LL*it->y.x*(P1-P2);//cost
			//	printf("u= %d dorzucam (%d,%d,%lld)\n",u,ns.x,ns.y.x,ns.y.y);
				S2.insert(ns);
			}

		}
		S1.clear();
	}

}
void solve() {
	int n,t;
	scanf("%d%d",&n,&t);
	fru(i,n-1){
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);a--;b--;
		V[a].pb(pii(b,c));
		V[b].pb(pii(a,c));
	}
	fru(i,t){
		int k;
		scanf("%d",&k);
		vi X;
		fru(j,k){
			int b;
			scanf("%d",&b);b--;
			X.pb(b);
		}
		sort(ALL(X));
		fru(j,k){
			int ile=upper_bound(ALL(X),X[j])-lower_bound(ALL(X),X[j]);
			S[X[j]].insert(make_pair(i,pil(ile,0)));
			j+=ile-1;
		}
	}
	DFS(0,-1);
	fru(i,t)printf("%lld\n",ans[i]);
}

int main() {
//	freopen("input.in", "r", stdin);
//	freopen("output.out", "w", stdout);
	int t=1;
//	scanf("%d",&t);
	fru(i,t) solve();
	return 0;
}