#include <bits/stdc++.h>
#define ll long long int
#define ld long double
using namespace std;

vector<int> subtrees;
vector<vector<pair<int, int>>> edges;

int dfs(int node, int parent, bool blocked)
{
  int nodes = 1;
  for (auto it : edges[node])
  {
    if (it.first == parent)
      continue;
    int x = dfs(it.first, node, (blocked || it.second));
    nodes += x;
    if (it.second && !blocked)
      subtrees.push_back(x);
  }
  return nodes;
}

void mainSolve()
{
  int n, k;
  cin >> n >> k;
  edges.clear();
  edges.resize(n + 1);
  for (int i = 1; i < n; i++)
  {
    int a, b, c;
    cin >> a >> b >> c;
    edges[a].push_back({b, c});
    edges[b].push_back({a, c});
  }
  subtrees.clear();
  dfs(1, 0, false);
  sort(subtrees.begin(), subtrees.end());
  reverse(subtrees.begin(), subtrees.end());
  int infected = n;
  if (infected <= k)
  {
    cout << 0 << endl;
    return;
  }
  for (int i = 0; i < subtrees.size(); i++)
  {
    infected -= subtrees[i];
    if (infected <= k)
    {
      cout << (i + 1) << endl;
      return;
    }
  }
  cout << -1 << endl;
}

int main()
{
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
  int t;
  cin >> t;
  while (t--)
  {
    mainSolve();
  }
  return 0;
}