← Home
```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)
	}
}
```