package main
import (
"bufio"
"fmt"
"os"
)
func readInt(in *bufio.Reader) int {
var n int
var c byte
for {
c, _ = in.ReadByte()
if c >= '0' && c <= '9' {
break
}
if c == '-' {
// Based on constraints, no negative numbers except potentially ignored
}
}
for {
n = n*10 + int(c-'0')
c, _ = in.ReadByte()
if c < '0' || c > '9' {
break
}
}
return n
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
t := readInt(in)
for tc := 0; tc < t; tc++ {
n := readInt(in)
m := readInt(in)
if n >= 20 {
for i := 0; i < m; i++ {
readInt(in)
readInt(in)
}
fmt.Fprintln(out, n)
for i := 1; i <= n; i++ {
fmt.Fprint(out, i, " ")
}
fmt.Fprintln(out)
} else {
req := make([]int, n+1)
for i := 0; i < m; i++ {
u := readInt(in)
v := readInt(in)
req[u] |= (1 << v)
}
for step := 0; step < n; step++ {
for i := 1; i <= n; i++ {
for j := 1; j <= n; j++ {
if (req[i] & (1 << j)) != 0 {
req[i] |= req[j]
}
}
}
}
kMax := n / 5
found := false
ansMask := 0
var check func(yMask int)
check = func(yMask int) {
xMask := 0
xArr := make([]int, n+1)
for i := 1; i <= n; i++ {
val := (yMask >> i) & 1
for j := 1; j < i; j++ {
if i%j == 0 {
val ^= xArr[j]
}
}
xArr[i] = val
if val == 1 {
xMask |= (1 << i)
}
}
if xMask == 0 {
return
}
for i := 1; i <= n; i++ {
if ((xMask >> i) & 1) == 1 {
if (req[i] &^ xMask) != 0 {
return
}
}
}
found = true
ansMask = xMask
}
var gen func(idx, rem, currentYMask int)
gen = func(idx, rem, currentYMask int) {
if found {
return
}
if rem == 0 {
check(currentYMask)
return
}
if idx > n {
return
}
gen(idx+1, rem-1, currentYMask|(1<<idx))
gen(idx+1, rem, currentYMask)
}
for sz := 0; sz <= kMax; sz++ {
gen(1, sz, 0)
if found {
break
}
}
if found {
var res []int
for i := 1; i <= n; i++ {
if (ansMask>>i)&1 == 1 {
res = append(res, i)
}
}
fmt.Fprintln(out, len(res))
for _, v := range res {
fmt.Fprint(out, v, " ")
}
fmt.Fprintln(out)
} else {
fmt.Fprintln(out, -1)
}
}
}
}