#include<bits/stdc++.h>
using namespace std;
struct node{
int to,next;
}lsqxx[1000006];
int head[1000006],cnt=0,ans=0,n,k,T;
int cnt2[1000006];
bool vis[1000006];
void add(int x,int y){
lsqxx[++cnt].to=y;
lsqxx[cnt].next=head[x];
head[x]=cnt;
}
void dfs(int x,int f){
cnt2[x]=1;
vis[x]=1;
for(int i=head[x];i!=0;i=lsqxx[i].next){
if(lsqxx[i].to==f)continue;
dfs(lsqxx[i].to,x);
cnt2[x]+=cnt2[lsqxx[i].to];
}
if(cnt2[x]>=k){
ans+=cnt2[x]/k;
cnt2[x]%=k;
}
}
int main(){
cin>>T;
while(T--){
ans=0;
cin>>n>>k;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}dfs(1,0);
if((ans==n/k)&&(n%k==0))cout<<"YES\n";
else cout<<"NO\n";
}
}