#include<bits/stdc++.h>
//#include <Windows.h> Sleep(300);
using namespace std;
//#define int long long
#define endl '\n'
#define vi vector<int>
#define pii pair<int, int>
#define pb push_back
#define mod 1000000007
#define log(args...){ string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); cout<<endl; }
void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
cout << *it << " = " << a << " ";
err(++it, args...);
}
#define fr(i, n) for(int i=0; i<n; i++)
#define fr1(i, n) for(int i=1; i<=n; i++)
#define fab(i, a, b) for(int i=a; i<b; i++)
const int dx[]={+1,-1,+0,+0};
const int dy[]={+0,+0,+1,-1};
int cnt=1;
void bfs(vector<vi>& g, vi& vis, int node, vi& ans){
vis[node] = 1;
queue<int> q;
q.push(node);
ans[0] = 1;
int nodenum=1;
while(not q.empty()){
int top = q.front();
q.pop();
for(int child: g[top]){
if(not vis[child]) {
q.push(child);
vis[child] = 1;
nodenum++;
}
}
ans[cnt++] += nodenum;
}
}
int32_t main() {
int t=1; cin>>t;
while(t--){
int n, q; cin>>n>>q;
vector<vi> g(n+1);
for(int i=1; i<n; i++) {
int u, v; cin>>u>>v;
g[u].pb(v);
g[v].pb(u);
}
vector<int> vis(n+1, 0), ans(n+1, 0);
bfs(g, vis, 1, ans);
while(q--){
int x; cin>>x;
cout<<ans[x]<<endl;
}
}
}