#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<cmath>
using namespace std;
int T,N,K;
vector<vector<int> > map;
int ans;
int dfs(int num)
{
for(long long unsigned i=1;i<map[num].size();i++)
{
if(dfs(map[num][i])==K) continue;
map[num][0]+=map[map[num][i]][0];
}
map[num][0]++;
if(map[num][0]==K) ans++;
return map[num][0];
}
int main()
{
cin>>T;
while(T--)
{
cin>>N>>K;
ans=0;
vector<bool>mark(N+1,true);
map.clear();
map.resize(N+1,vector<int>(1)={0});
for(int i=1;i<N;i++)
{
int parent,son;
cin>>parent>>son;
mark[son]=false;
map[parent].push_back(son);
}
for(int i=1;i<=N;i++)
{
if(mark[i])
{
dfs(i);
break;
}
}
if(ans==1.0*N/K) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}