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)
}
}