#include<bits/stdc++.h>
using namespace std;
struct edge{
int v,w;
};
vector<edge> g[100010];
int vis[100010],n,m,d,sum=0,summ[11];
int o=-1;
inline int read(){
int f=1,x=0;char ch;
do{
ch=getchar();
if(ch=='-')
f=-1;
}while(ch<'0'||ch>'9');
do{
x=x*10+ch-'0';
ch=getchar();
}while(ch>='0'&&ch<='9');
return f*x;
}
void addedge(int u,int v,int w){
edge e1;e1.v=v;e1.w=w;
g[u].push_back(e1);
edge e2;e2.v=u;e2.w=w;
g[v].push_back(e2);
}
//遍历:
void dfs(int u)
{
o++;
if(o>d)
sum++;
//printf("%d",u);
vis[u]=1;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i].v,w=g[u][i].w;
if(vis[v]!=0)continue;
dfs(v);
o--;
}
}
int main(void){
int ss=read();
for(int j=0;j<ss;j++)
{
n=read();
d=read();
memset(vis,0,sizeof(vis));
o=-1;
for(int i=0;i<n;i++)g[i].clear();
sum=0;
for(int i=1;i<n;i++)
{
int u=read(),v=read(),w=1;
addedge(u,v,w);
}
dfs(0);
memset(vis,0,sizeof(vis));
o=-1;
for(int i=0;i<n;i++)g[i].clear();
summ[j]=sum;
sum=0;
}
for(int i=0;i<ss;i++)
printf("%d\n",summ[i]);
}