#include<bits/stdc++.h>
using namespace std;
const int N=200020;
int c[N],d[N];
vector<int>e[N],f[N];
int dp[N];
void dfs(int x,int y,int p,int q)
{
map<int,int>mp;
for(int i=0;i<e[x].size();i++)
{
int nx=e[x][i];
if(nx==p)continue;
mp[c[nx]]=nx;
}
int mx=0;
for(int i=0;i<f[y].size();i++)
{
int ny=f[y][i];
if(ny==q)continue;
if(mp.count(d[ny]))
{
dfs(mp[d[ny]],ny,x,y);
mx=max(mx,dp[ny]);
}
}
dp[y]=mx+1;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>c[i];
for(int i=1;i<=m;i++)cin>>d[i];
for(int i=1;i<n;i++)
{
int u,v;cin>>u>>v;
e[u].push_back(v);
e[v].push_back(u);
}
for(int i=1;i<m;i++)
{
int p,q;cin>>p>>q;
f[p].push_back(q);
f[q].push_back(p);
}
if(c[1]!=d[1])
{cout<<0;return 0;}
dfs(1,1,0,0);
cout<<dp[1];
return 0;
}