// dfs求树的直径
// 记录以 节点i为根的最长路径 以及最大深度
// 然后就 看 k的值了
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#define maxm 100010
#define maxn 1000110
struct Eg{
int to;
int next;
}E[maxm<<1];
int V[maxm],num;
int vi[maxm];
void add(int u,int v){
E[num].to=v;
E[num].next=V[u];
V[u]=num++;
E[num].to=u;
E[num].next=V[v];
V[v]=num++;
}
int ans;
int dfs(int u){
vi[u]=true;
int e,v;
int max1=0,max2=0,tp;
for(e=V[u];e!=-1;e=E[e].next){
v=E[e].to;
if(vi[v]) continue;
tp=dfs(v);
//printf("=%d %d
",u,tp);
if(tp>max1){
max2=max(max1,max2);
max1=tp;
}
else if(tp>max2)
max2=tp;
}
ans=max(ans,max1+max2);
return max1+1;
}
int main()
{
int T;
int n,m;
int i;
int u,v,k;
scanf("%d",&T);
while(T--){
scanf("%d %d",&n,&m);
num=0;
ans=0;
for(i=1;i<=n;i++) V[i]=-1,vi[i]=0;
for(i=1;i<n;i++){
scanf("%d %d",&u,&v);
add(u,v);
}
dfs(1);
while(m--){
scanf("%d",&k);
if(k<=ans+1) printf("%d
",k-1);
else printf("%d
",ans+(k-ans-1)*2);
}
}
return 0;
}