← Home
package main

import (
	"bufio"
	"io"
	"os"
	"strconv"
)

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt() int {
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if (c >= '0' && c <= '9') || c == '-' {
			break
		}
		fs.idx++
	}
	sign := 1
	if fs.data[fs.idx] == '-' {
		sign = -1
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if c < '0' || c > '9' {
			break
		}
		val = val*10 + int(c-'0')
		fs.idx++
	}
	return sign * val
}

func main() {
	in := NewFastScanner()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	t := in.NextInt()
	ans := make([]byte, 0, t*4)

	for ; t > 0; t-- {
		n := in.NextInt()
		k := in.NextInt()

		g := make([][]int, n+1)
		deg := make([]int, n+1)

		for i := 0; i < n-1; i++ {
			u := in.NextInt()
			v := in.NextInt()
			g[u] = append(g[u], v)
			g[v] = append(g[v], u)
			deg[u]++
			deg[v]++
		}

		if k == 0 {
			ans = strconv.AppendInt(ans, int64(n), 10)
			ans = append(ans, '\n')
			continue
		}

		q := make([]int, 0)
		for i := 1; i <= n; i++ {
			if deg[i] <= 1 {
				q = append(q, i)
			}
		}

		rem := n
		for step := 0; step < k && len(q) > 0; step++ {
			rem -= len(q)
			nq := make([]int, 0)
			for _, v := range q {
				deg[v] = 0
				for _, to := range g[v] {
					if deg[to] > 0 {
						deg[to]--
						if deg[to] == 1 {
							nq = append(nq, to)
						}
					}
				}
			}
			q = nq
		}

		ans = strconv.AppendInt(ans, int64(rem), 10)
		ans = append(ans, '\n')
	}

	out.Write(ans)
}