```go
package main
import (
"fmt"
"sort"
)
func main() {
var t int
fmt.Scan(&t)
for i := 0; i < t; i++ {
var n int
fmt.Scan(&n)
a := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scan(&a[i])
}
sumv := int64(0)
for _, val := range a {
sumv += int64(v2(val))
}
def := int64(n) - sumv
if def <= 0 {
fmt.Println(0)
continue
}
var contrib []int
for i := 1; i <= n; i++ {
v := v2(i)
if v > 0 {
contrib = append(contrib, v)
}
}
sort.Slice(contrib, func(i, j int) bool { return contrib[i] > contrib[j] })
cursum := int64(0)
cnt := 0
ok := false
for _, v := range contrib {
cursum += int64(v)
cnt++
if cursum >= def {
ok = true
break
}
}
if ok {
fmt.Println(cnt)
} else {
fmt.Println(-1)
}
}
}
func v2(x int) int {
cnt := 0
for x%2 == 0 {
x /= 2
cnt++
}
return cnt
}
```