#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<string>
#include<queue>
#include<cstdlib>
#include<ctime>
#include<map>
#define in cin
#define out cout
#define abs(x) ((x>0)?(x):(-(x)))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define FOR(i, a, b) for(int i = a; i <= b; ++i)
#define DOWNFOR(i, a, b) for(int i = a; i >= b; --i)
#define FOREACH(i, t) for (typeof(t.begin()) i = t.begin(); i != t.end(); ++i)
using namespace std;
typedef long long ll;
const int Nmax = 10001;
vector<int> G[Nmax],B[301];
struct ln{
    int x,y,d;
    ln(){}
    ln(int _x,int _y,int _d){x=_x,y=_y,d=_d;}
};
struct cmp{
    inline bool operator () (const ln &a,const ln &b){
        return a.d<b.d;
    }
};
vector<ln> E;
int a[301],b[301];
int v[301][301];
int N,K;
int m[Nmax];
void dfs(int x,int l){
    m[x]=l;
    FOREACH(t,G[x]){
        if(!m[*t]) dfs(*t,l+1);
    }
}
int l[301],r[301];
int addpath(int x){
    if(m[x]) return 0;
    m[x]=1;
    FOREACH(t,B[x]){
        if(!r[*t] || addpath(r[*t])){
            l[x]=*t;
            r[*t]=x;
            return 1;
        }
    }
    return 0;
}
int res(int val){
    FOR(i,1,K) B[i].clear();
    FOR(i,0,val){
        if( E[i].d ) B[ E[i].x ].push_back( E[i].y );
    }
    int p=1;
    while(p){
        p=0;FOR(i,1,K) m[i]=0;
        FOR(i,1,K) if(!l[i]) p |= addpath(i);
    }
    int ok=1;
    FOR(i,1,K) if(!l[i]) ok=0;
    return ok;
}
int bs(){
    int i=-1,pas=(1<<17);
    while(pas){
        if(i+pas<E.size() && !res(i+pas)) i+=pas;
        pas>>=1;
    }
    return i+1;
}
int main(){
    #ifndef ONLINE_JUDGE
    ifstream in("test.in");
    ofstream out("test.out");
    #endif
    in>>N>>K;
    FOR(i,1,K) in>>a[i];
    FOR(i,1,K) in>>b[i];
    FOR(i,1,N-1){
        int x,y;
        in>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    FOR(i,1,K){
        FOR(j,1,N) m[j]=0;
        dfs(a[i],1);
        FOR(j,1,K) v[i][j]=m[b[j]];
    }
    FOR(i,1,K) FOR(j,1,K) E.push_back( ln(i,j,v[i][j]) );
    sort(E.begin(),E.end(),cmp());
    out<< E[bs()].d <<'\n';
    return 0;
}