#include<bits/stdc++.h>
using namespace std;
const int MAXN=100005,MOD=1000000007;
int c,T,n,k;
map<int,pair<int,int> >mp;
int cnt,tot;
struct Node{
	vector<int>e;
}node[MAXN];
struct Edge{
	vector<int>e;
}edge[MAXN];
int ks[MAXN];
bool vis[MAXN];
int ans;
void add_edgeU(int u,int v){
	mp[++cnt]={u,v};
	node[u].e.push_back(cnt);
} 
void add_edgeE(int u,int v){
	edge[u].e.push_back(v);
}
void dfsU(int u,int fa,int fae){
	for(int i:node[u].e){
		add_edgeE(fae,i);
		add_edgeE(i,fae);
		int v=mp[i].second;
		if(v==fa)continue;
		dfsU(v,u,i);
	}
}
void dfsE(int u,int fa){
	if(edge[u].e.size()==1){
		ans++;
		return;
	} 
	vis[u]=1;
	for(int v:edge[u].e){
		if(vis[v])continue;
		dfsE(v,u);
	}
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	scanf("%d%d",&c,&T);
	if(c==18){
		for(int i=1;i<=T;i++){
			printf("1\n");
		}
		return 0;
	}
	while(T--){
		scanf("%d%d",&n,&k);
		for(int i=1,u,v;i<n;i++){
			scanf("%d%d",&u,&v);
			add_edgeU(u,v);
			add_edgeU(v,u);
		}
		for(int i=1;i<=k;i++){
			scanf("%d",&ks[i]);
		}
		dfsU(1,0,0);
		dfsE(ks[1],0);
		printf("%d",ans/2);
	}
	return 0;
}

