#include<bits/stdc++.h>
using namespace std;

using i64 = long long;

const int inf=1e9;

void bfs(int u, vector<vector<int>> &g, vector<int> &dist, vector<bool> &p, vector<int> &a) {
    queue<int> q; q.push(u);
    dist[u] = 0;
    while (!q.empty()) {
        int node = q.front(); q.pop();
        if(p[node]) a.push_back(dist[node]);
        for (auto &x: g[node]) {
            if (dist[x] == -1) {
                dist[x] = dist[node] + 1; 
                q.push(x);
            }
        }
    }
}

void solve(){
    int n,k; cin>>n>>k;

    vector<bool> p(n+1);
    for(int i=0;i<k;i++) {
        int x; cin>>x;
        p[x]=true;
    }
    int root=1;
    vector<vector<int>> g(n+1);
    vector<int> dist(n+1,-1),mset,ans(n+1);

    for (int i = 0; i < n - 1; ++i) {
        int u, v; cin >> u >> v; 
        g[u].push_back(v);
        g[v].push_back(u);
    }
    for (int i = 1; i <= n; ++i)
        if (g[i].size() == 1)
            root=i;
    
    bfs(root, g, dist, p, mset); 
    sort(mset.begin(), mset.end());
    
    for (int i = 1; i <= n; ++i)
        ans[i] = max(abs(dist[i] - mset.front()), abs(dist[i] - mset.back()));

    cout << *min_element(ans.begin()+1,ans.end())<<'\n';
    return;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);

    int t; cin>>t;
    while(t--){
        solve();
    }
}