#include<bits/stdc++.h>
# define Maxn 100005 
# define ll long long
# define mod 1000000007
# define mod1 1000007
using namespace std;
bool A,B,f[mod1+10],bz[10][10],vis[10];
int c,T,n,k,u[Maxn],v[Maxn],E[Maxn],ans;
vector<pair<int,int>> e[Maxn];
vector<int> e1[Maxn];
void init()
{
	if(A!=0)
	{
		for(int i=1;i<=n;i++)
		{
			e[i].clear();
			e1[i].clear();
		}
		A=0;B=0;
	}
}
void dfs2(int rt,int fa)
{
	vis[rt]=1;
	int son=0;
	for(int i:e1[rt])
	{
		if(vis[i]==1) continue;
		son++;
		bz[rt][i]=1;bz[i][rt]=1;
		dfs2(i,rt);
	}
	vis[rt]=0;
	if(son==0)
	{
		int v=0;
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				v=v*2+bz[i][j];
				v%=mod1;
			}
		}
		if(f[v]==0) ans++;
		f[v]=1;
	}
}
void solve1()
{
	for(int i=1;i<n;i++)
	{
		for(int j=1;j<n;j++)
		{
			if(i!=j)
			{
				if(u[i]==u[j]||u[i]==v[j]||v[i]==u[j]||v[i]==v[j])
				{
					e1[i].push_back(j);
//					e1[j].push_back(i);
				}
			}
		}
	}
	for(int i=1;i<=k;i++) dfs2(E[i],0);
	printf("%d\n",ans);
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout); 
	scanf("%d%d",&c,&T);
	while(T--)
	{
		init();
		scanf("%d%d",&n,&k);
		for(int i=1;i<n;i++)
		{
			scanf("%d%d",&u[i],&v[i]);
			e[u[i]].push_back({v[i],i});e[v[i]].push_back({u[i],i});
			if(u[i]!=i||v[i]!=i+1) A=1;
		}
		for(int i=1;i<=k;i++) scanf("%d",&E[i]);
		if(A==0) {printf("1\n");continue ;}
		if(n<=10&&k<=10) {solve1();continue ;}
	}
	return 0;
}
