#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int c,t,n,k,tot,ans;
int u[N],v[N],e[N],bz[N];
int hd[N],nt[N<<1];
int to[N<<1],bh[N<<1];
void add(int u,int v,int w){
	nt[++tot]=hd[u];
	hd[u]=tot;
	to[tot]=v;
	bh[tot]=w;
}
void dfs(int x,int fa,int s){
	if(s==n-2){
		ans++;
		return;
	}
	bz[x]=1;
	for(int i=hd[u[x]];i;i=nt[i]){
		if(bh[i]==fa||bh[i]==x||bz[bh[i]]){
			continue;
		}
		dfs(bh[i],x,s+1);
	}
	for(int i=hd[v[x]];i;i=nt[i]){
		if(bh[i]==fa||bh[i]==x||bz[bh[i]]){
			continue;
		}
		dfs(bh[i],x,s+1);
	}
	bz[x]=0;
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	scanf("%d%d",&c,&t);
	while(t--){
		scanf("%d%d",&n,&k);
		tot=1;
		for(int i=1;i<=n;i++){
			hd[i]=0;
		}
		for(int i=1;i<n;i++){
			scanf("%d%d",&u[i],&v[i]);
			add(u[i],v[i],i);
			add(v[i],u[i],i);
		}
		ans=0;
		for(int i=1;i<=k;i++){
			scanf("%d",&e[i]);
			dfs(e[i],0,1);
		}
		printf("%d\n",ans);
	}
}
