← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	buf := make([]byte, 0, 64*1024)
	scanner.Buffer(buf, 1024*1024*10)

	var nextInt = func() int {
		scanner.Scan()
		res, _ := strconv.Atoi(scanner.Text())
		return res
	}

	if !scanner.Scan() {
		return
	}
	t, _ := strconv.Atoi(scanner.Text())
	for tc := 0; tc < t; tc++ {
		n := nextInt()
		k := nextInt()

		friends := make([]int, k)
		for i := 0; i < k; i++ {
			friends[i] = nextInt()
		}

		adj := make([][]int, n+1)
		for i := 0; i < n-1; i++ {
			u := nextInt()
			v := nextInt()
			adj[u] = append(adj[u], v)
			adj[v] = append(adj[v], u)
		}

		dist := make([]int, n+1)
		for i := 1; i <= n; i++ {
			dist[i] = -1
		}
		queue := make([]int, 0, n)
		for _, x := range friends {
			dist[x] = 0
			queue = append(queue, x)
		}

		for len(queue) > 0 {
			u := queue[0]
			queue = queue[1:]
			for _, v := range adj[u] {
				if dist[v] == -1 {
					dist[v] = dist[u] + 1
					queue = append(queue, v)
				}
			}
		}

		var dfs func(u, p, d int) int
		dfs = func(u, p, d int) int {
			if dist[u] <= d {
				return 1
			}
			isLeaf := true
			sum := 0
			for _, v := range adj[u] {
				if v != p {
					isLeaf = false
					res := dfs(v, u, d+1)
					if res == -1 {
						return -1
					}
					sum += res
				}
			}
			if isLeaf && u != 1 {
				return -1
			}
			return sum
		}

		ans := dfs(1, 0, 0)
		fmt.Println(ans)
	}
}