#include <bits/stdc++.h>
#define SZ(X) ((int)(X).size())
#define ALL(X) (X).begin(), (X).end()
#define REP(I, N) for (int I = 0; I < (N); ++I)
#define REPP(I, A, B) for (int I = (A); I < (B); ++I)
#define RI(X) scanf("%d", &(X))
#define RII(X, Y) scanf("%d%d", &(X), &(Y))
#define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))
#define DRI(X) int (X); scanf("%d", &X)
#define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)
#define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)
#define RS(X) scanf("%s", (X))
#define CASET int ___T, case_n = 1; scanf("%d ", &___T); while (___T-- > 0)
#define MP make_pair
#define PB push_back
#define MS0(X) memset((X), 0, sizeof((X)))
#define MS1(X) memset((X), -1, sizeof((X)))
#define LEN(X) strlen(X)
#define PII pair<int,int>
#define VPII vector<pair<int,int> >
#define PLL pair<long long,long long>
#define F first
#define S second
typedef long long LL;
using namespace std;
const int MOD = 1e9+7;
const int SIZE = 1e5+10;
// template end here
VPII e[SIZE],emp;
int N,L,R;
int d[SIZE],dn;
int bfs[SIZE],sons[SIZE];
int used[SIZE],tt,tt2,father[SIZE];
vector<int>qq,resident[100001];
LL an[SIZE];
template <class T>
void maa(T& x,T y){
    if(x<y)x=y;
}
template <class T>
void mii(T& x,T y){
    if(x>y)x=y;
}
void build(int st){
    bfs[0]=st;
    tt2--;
    used[st]=tt2;
    int i=0,j=1;
    for(;i<j;i++){
        int x=bfs[i];
        sons[x]=1;
        REP(k,SZ(e[x])){
            int y=e[x][k].F;
            if(used[y]==tt||used[y]==tt2)continue;
            father[y]=x;
            used[y]=tt2;
            bfs[j++]=y;
        }
    }
    int num=j;
    for(i=j-1;i>=0;i--){
        int x=bfs[i];
        if(sons[x]*2>=num){
            qq.PB(x);
            used[x]=tt;
            REP(k,SZ(e[x])){
                int y=e[x][k].F;
                if(used[y]!=tt)build(y);
            }
            return;
        }
        sons[father[x]]+=sons[x];
    }
}
void init(){
    tt++;
    qq.clear();
    build(0);
}
int exist[SIZE],nn[SIZE],tt3;
LL dis[SIZE],dp[SIZE];
void add(int st,int vv){
    bfs[0]=st;
    dis[st]=vv;
    int i=0,j=1;
    tt2--;
    used[st]=tt2;
    for(;i<j;i++){
        int x=bfs[i];
        REP(k,SZ(resident[x])){
            if(exist[resident[x][k]]==tt3){
                an[resident[x][k]]+=dis[x]*nn[resident[x][k]]+dp[resident[x][k]];
            }
        }
        REP(k,SZ(e[x])){
            int y=e[x][k].F;
            if(used[y]==tt||used[y]==tt2)continue;
            used[y]=tt2;
            dis[y]=dis[x]+e[x][k].S;
            bfs[j++]=y;
        }
    }
    REP(k,j){
        int x=bfs[k];
        REP(k,SZ(resident[x])){
            if(exist[resident[x][k]]!=tt3){
                exist[resident[x][k]]=tt3;
                nn[resident[x][k]]=0;
                dp[resident[x][k]]=0;
            }
            nn[resident[x][k]]++;
            dp[resident[x][k]]+=dis[x];
        }
    }
}
void solve(){
    tt++;
    REP(i,SZ(qq)){
        int me=qq[i];
        used[me]=tt;
        tt3++;
        REP(j,SZ(resident[me])){
            if(exist[resident[me][j]]!=tt3){
                exist[resident[me][j]]=tt3;
                dp[resident[me][j]]=0;
                nn[resident[me][j]]=0;
            }
            nn[resident[me][j]]++;
        }
        REP(j,SZ(e[me])){
            int you=e[me][j].F;
            if(used[you]!=tt)
                add(you,e[me][j].S);
        }
    }
}
int main(){
    DRII(N,T);
    {
        dn=0;
        REPP(i,1,N){
            DRIII(x,y,v);
            x--;y--;
            e[x].PB(MP(y,v));
            e[y].PB(MP(x,v));
        }
        init();
        REP(i,T){
            DRI(Q);
            while(Q--){
                DRI(x);
                x--;
                resident[x].PB(i);
            }
        }
        solve();
        REP(i,T)printf("%lld\n",an[i]);
    }
    return 0;
}