#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int n,k,i,x,y,ma,j,s[10004],c[10004];
struct spec
{
    int a,b;
}a[305];
struct nod
{
    int nr;
    nod *urm;
}*p,*v[10004];
void add(nod *&d,int x)
{
    nod *p;
    p=new nod;
    p->nr=x;
    p->urm=d;
    d=p;
}
void BFS(int x,int y)
{
    nod *p;
    s[1]=x;
    int l=1;
    c[x]=0;
    int z=0;
    for(int i=1;i<=l&&z==0;i++)
        for(p=v[s[i]];p!=0;p=p->urm)
            if(c[p->nr]==-1)
            {
                c[p->nr]=c[s[i]]+1;
                if(p->nr==y){z=1;break;}
                l++;
                s[l]=p->nr;
            }
}
bool cmp(spec x,spec y)
{
    if(x.a>y.a)return 0;
    else if(x.a==y.a&&x.b>y.b)return 0;
    return 1;
}
int main()
{
    //freopen("input","r",stdin);
    //freopen("output","w",stdout);
    scanf("%d %d",&n,&k);
    for(i=1;i<=k;i++)
        scanf("%d",&a[i].a);
    for(j=1;j<=k;j++)
        scanf("%d",&a[j].b);
    for(i=1;i<=n-1;i++)
    {
        scanf("%d %d",&x,&y);
        add(v[x],y);
        add(v[y],x);
    }
    sort(a+1,a+k+1,cmp);
    for(i=1;i<=k;i++)
    {
        if(a[i].a!=a[i-1].a)
        {
            memset(c,-1,sizeof(c));
            BFS(a[i].a,a[i].b);
        }
        if(ma<c[a[i].b])ma=c[a[i].b];
    }
    printf("%d",ma);
    return 0;
}