#include <iostream>
#include <vector>
#include <cstdio>

using namespace std;

vector <vector <int> > Map;

int N, K, in, sf, x, y, elem, need[10002], T[10002], coada[10002], Length[10002];

int main() {
    #ifndef ONLINE_JUDGE
    freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE

    cin >> N >> K;

    Map.resize(10002);

    for(int i = 1; i <= K; ++i) {
        cin >> x;

        T[x] = 1;
        coada[++sf] = x;
    }

    elem = K;

    for(int i = 1; i <= K; ++i) {
        cin >> x;

        need[x] = 1;

        if(T[x]) {
            need[x] = 0;
            --elem;
        }
    }

    for(int i = 1; i < N; ++i) {
        cin >> x >> y;

        Map[y].push_back(x);
        Map[x].push_back(y);
        ++Length[x];
        ++Length[y];
    }

    in = 1;
    elem = K;

    int mx = 0;

    while(in <= sf && elem) {
        for(int i = 0;elem && i < Length[coada[in]]; ++i) {
            if(T[Map[coada[in]][i]] == 0) {
                T[Map[coada[in]][i]] = T[coada[in]] + 1;
                if(need[Map[coada[in]][i]] == 1) {
                    need[Map[coada[in]][i]] = 0;
                    --elem;
                }

                coada[++sf] = Map[coada[in]][i];

                mx = max(mx, T[Map[coada[in]][i]]);
            }
        }

        ++in;
    }

    cout << mx - 1 << '\n';

    return 0;
}