#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int n,k;
vector<int> edge[100005];
int big[100005];
int connect[100005];
int total=0;
bool ed[100005];
bool init()
{
memset(connect,0,sizeof(connect));
memset(edge,0,sizeof(edge));
memset(ed,0,sizeof(ed));
memset(big,0,sizeof(big));
n=0,k=0;
total=0;
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
edge[a].push_back(b);
edge[b].push_back(a);
connect[a]++;
connect[b]++;
}
if(n%k!=0)
{
printf("NO\n");
return 0;
}
return 1;
}
int dfs(int now)
{
ed[now]=1;
big[now]=1;
bool flag=0;
int i=0;
for(;i<edge[now].size();i++)
{
if(ed[edge[now][i]]==0)
{
big[now]+=dfs(edge[now][i]);
}
if(big[now]==k&&flag==0)
{
big[now]=0;
total+=k;
flag=1;
break;
}
}
for(;i<edge[now].size();i++)
{
dfs(edge[now][i]);
}
return big[now];
}
int main()
{
int T;
cin>>T;
for(int i=1;i<=T;i++)
{
if(init()==0)
{
continue;
}
int q=1;
for(;connect[q]==1;q++);
dfs(q);
if(total==n)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
/*
2
4 2
2 3
1 2
3 4
4 2
1 2
1 3
1 4
*/