#include <iostream>
using namespace std;
int n,a[10000][10000],viz[10000],da[10000];

int parcurge(int vf)
{int x,i,in,sf,q[10000],viz2[10000];
in=sf=0;
q[0]=vf;
for(i=1;i<=n;i++)viz2[i]=0;
viz2[vf]=1;

while(in<=sf)
{x=q[in++];
for(i=1;i<=a[x][0];i++)
    if(!viz2[a[x][i]])
  {if(da[a[x][i]]&&!viz[a[x][i]])
   {viz[a[x][i]]=1;
       return viz2[x];
   }
  else
   {viz2[a[x][i]]=viz2[x]+1;
   q[++sf]=a[x][i];
   }
  }
}
return 31999;
}


int main()
{int c,k,i,b,maxim,s[10000];
    cin>>n>>k;
for(i=1;i<=k;i++)
    cin>>s[i];
for(i=1;i<=k;i++)
    {cin>>b;da[b]=1;}
for(i=1;i<n;i++)
{cin>>c>>b;
 a[c][0]++;
 a[c][a[c][0]]=b;
 a[b][0]++;
 a[b][a[b][0]]=c;}

maxim=0;
for(i=1;i<=k;i++)
 maxim=max(maxim,parcurge(s[i]));
cout<<maxim;

}