```go
package main
import (
"io"
"os"
"strings"
)
func lowerBound(a []int, x int) int {
l, r := 0, len(a)
for l < r {
m := (l + r) >> 1
if a[m] < x {
l = m + 1
} else {
r = m
}
}
return l
}
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
n := len(data)
for idx < n && (data[idx] < '0' || data[idx] > '9') && data[idx] != '-' {
idx++
}
sign := 1
if idx < n && data[idx] == '-' {
sign = -1
idx++
}
val := 0
for idx < n && data[idx] >= '0' && data[idx] <= '9' {
val = val*10 + int(data[idx]-'0')
idx++
}
return val * sign
}
t := nextInt()
var sb strings.Builder
for ; t > 0; t-- {
n := nextInt()
q := nextInt()
a := make([]int, n)
for i := 0; i < n; i++ {
a[i] = nextInt()
}
p := make([]int, n+1)
for i := 1; i <= n; i++ {
p[i] = p[i-1] ^ a[i-1]
}
mp := make(map[int][]int, n+1)
for i := 0; i <= n; i++ {
mp[p[i]] = append(mp[p[i]], i)
}
for ; q > 0; q-- {
l := nextInt()
r := nextInt()
L := p[l-1]
R := p[r]
if (L ^ R) == 0 {
sb.WriteString("YES\n")
continue
}
vsR := mp[R]
i1 := lowerBound(vsR, l)
if i1 >= len(vsR) || vsR[i1] >= r {
sb.WriteString("NO\n")
continue
}
vsL := mp[L]
i2 := lowerBound(vsL, vsR[i1]+1)
if i2 < len(vsL) && vsL[i2] <= r-1 {
sb.WriteString("YES\n")
} else {
sb.WriteString("NO\n")
}
}
}
os.Stdout.WriteString(sb.String())
}
```