#include<bits/stdc++.h>
using namespace std;
#define int long long
#define F(i,k,n) for (int i=k;i<=n;i++)
#define R(i,k,n) for (int i=k;i>=n;i--)
const int N=1e5+10;
int f[20][20];
int n,m,a,b,s;
int sz[20];
vector<int>T[20];
map<pair<int,int>,bool>mp;
int getnum(int s){
int sum=0;
F(i,1,n) if ((s>>(i-1))&1) sum++;
return sum;
}
void dfs(int u,int fa){
F(i,1,n) if (s>>(i-1)&1) f[u][i]=1;
F(i,0,(int)T[u].size()-1){
int v=T[u][i];
if (v==fa) continue;
dfs(v,u);
}
F(j,1,n){
F(i,0,(int)T[u].size()-1){
int v=T[u][i];
if (v==fa) continue;
int sum=0;
F(k,1,n){
if (mp[make_pair(j,k)]){
sum+=f[v][k];
}
}
f[u][j]*=sum;
}
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
F(i,1,m){
cin>>a>>b;
mp[make_pair(a,b)]=mp[make_pair(b,a)]=1;
}
F(i,1,n-1){
cin>>a>>b;
T[a].push_back(b);T[b].push_back(a);
}
int ans=0;
for (s=0;s<=(1<<n)-1;s++){
dfs(1,0);
int tot=0;
F(i,1,n) tot+=f[1][i];
memset(f,0,sizeof f);
ans+=((n-getnum(s))&1?1:-1)*tot;
}
cout<<abs(ans);
return 0;
}