#include <bits/stdc++.h>
using namespace std;
int dfs(vector<vector<pair<int,int>>>& edges,int v,vector<int>& can_be_saved,bool block,int parent) {
int nodes=1;
for(auto e:edges[v]) {
if(e.first!=parent) {
int x = dfs(edges,e.first,can_be_saved,(block|e.second),v);
nodes += x;
if(e.second==1 && !block)
can_be_saved.push_back(x);
}
}
return nodes;
}
void solve() {
int n,k;
cin >> n >> k;
vector<vector<pair<int,int>>> edges(n+1);
for(int i=0;i<n-1;i++) {
int u,v,x;
cin >> u >> v >> x;
edges[u].push_back({v,x});
edges[v].push_back({u,x});
}
vector<int> can_be_saved;
dfs(edges,1,can_be_saved,0,-1);
sort(can_be_saved.begin(),can_be_saved.end());
int infected = n, count=0;
for(int i=can_be_saved.size()-1;i>=0 && infected>k;i--) {
infected -= can_be_saved[i];
count++;
}
if(infected>k)
cout << -1 << endl;
else
cout << count << endl;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while(T--) {
solve();
}
return 0;
}