#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;
}