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

struct line{
	int nxt,to;
	bool vis;
}a[200001];
const int mod=1e9+7;
long long c,t,cnt,n,k,head[100001],e,maxx;
long long ans;
void add(int u,int v){
	cnt++;
	a[cnt].nxt=head[u];
	a[cnt].to=v;
	head[u]=cnt;
}
long long dfs(int npoint){
	bool flag=false;
	long long sum=0;
	for(int i=head[npoint];i!=0;i=a[i].nxt){
		//cout<<i<<" "<<a[i].to<<"--\n";
		if(a[i].vis==false){
			a[i].vis=true;
			int temp=dfs(a[i].to);
			sum*=temp;
			sum%=mod;
			a[i].vis=false;
			flag=true;
		}
	}
	if(flag==false){
		return 1;
	}else{
		return sum;
	}
}

int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	cin>>c>>t;
	for(int tt=1;tt<=t;tt++){
		cnt=0;
		cin>>n>>k;
		ans=0;
		maxx=0;
		memset(head,0,sizeof(head));
		memset(a,0,sizeof(a));
		for(int i=1;i<n;i++){
			int t1,t2;
			cin>>t1>>t2;
			add(t1,t2);
		}
		for(int i=1;i<=k;i++){
			cin>>e;
			maxx=max(maxx,dfs(e));
		}
		cout<<maxx<<"\n";
	}
}
