#include <bits/stdc++.h>
#define ll long long int
using namespace std;
bool is_tourist[100005];
int f_subtree[100005];
int f_sum[100005];
int f_max[100005][2];
int n, k;
void dfs1(int node, vector<vector<int>> &adj, int pa, int dist)
{
for (auto child : adj[node])
{
if (child == pa)
continue;
dfs1(child, adj, node, dist + 1);
f_subtree[node] += f_subtree[child];
if (f_subtree[child] > 0)
{
f_max[node][0] = max(f_max[node][0], f_max[child][0] + 1);
}
}
if (is_tourist[node])
++f_subtree[node], f_sum[1] += dist;
}
void dfs2(int node, vector<vector<int>> &adj, int pa)
{
set<int> max_dis;
for (auto child : adj[node])
{
if (child == pa)
continue;
max_dis.insert(f_max[child][0]);
}
for (auto child : adj[node])
{
if (child == pa)
continue;
int curr = f_max[child][0];
max_dis.erase(curr);
int val = 0;
if (!max_dis.empty())
val = (*max_dis.rbegin()) + 2;
val = max(val, f_max[node][1] + 1);
f_max[child][1] = val;
f_sum[child] = f_sum[node] + (k - f_subtree[child]) - f_subtree[child];
dfs2(child, adj, node);
max_dis.insert(curr);
}
}
void mainSolve()
{
cin >> n >> k;
memset(is_tourist, false, sizeof(is_tourist));
memset(f_subtree, false, sizeof(f_subtree));
memset(f_max, 0, sizeof(f_max));
memset(f_sum, 0, sizeof(f_sum));
vector<vector<int>> adj(n + 1);
for (int i = 0; i < k; i++)
{
int x;
cin >> x;
is_tourist[x] = true;
}
for (int i = 0; i < n - 1; i++)
{
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs1(1, adj, 0, 0);
dfs2(1, adj, 0);
int ans = 1;
int dis = 1e7;
for (int i = 1; i <= n; i++)
{
int curr = f_sum[i] - max(f_max[i][0], f_max[i][1]);
if (dis >= curr)
dis = curr, ans = i;
}
cout << ans << endl;
}
int main()
{
int t;
cin >> t;
while (t--)
{
mainSolve();
}
return 0;
}