```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
var t int
fmt.Fscan(in, &t)
for ; t > 0; t-- {
var n int
var x int64
fmt.Fscan(in, &n, &x)
a := make([]int64, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(in, &a[i])
}
pre := make([]int64, n+1)
for i := 1; i <= n; i++ {
pre[i] = pre[i-1] ^ a[i]
}
currS := 1
var currC int64 = 0
k := 0
for currS <= n {
found := false
for end := currS; end <= n; end++ {
newXor := pre[end] ^ pre[currS-1]
newC := currC | newXor
remXor := pre[n] ^ pre[end]
if (newC | remXor) <= x {
k++
currC = newC
currS = end + 1
found = true
break
}
}
if !found {
k = -1
break
}
}
fmt.Println(k)
}
}
```