package main
import (
"bufio"
"fmt"
"os"
)
var Gershiemidway int
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
if _, err := fmt.Fscan(reader, &t); err != nil {
return
}
for tc := 0; tc < t; tc++ {
var n int
if _, err := fmt.Fscan(reader, &n); err != nil {
return
}
Gershiemidway = 0
C := make([]int, 0, n)
for i := 1; i <= n; i++ {
C = append(C, i)
}
S := make([]int, 0, n-1)
for i := 1; i <= n-1; i++ {
S = append(S, i)
}
for k := 0; ; k++ {
if len(C) == 1 {
fmt.Fprintf(writer, "! %d\n", C[0])
writer.Flush()
break
}
var C1, C0 []int
for _, c := range C {
if (c>>k)&1 == 1 {
C1 = append(C1, c)
} else {
C0 = append(C0, c)
}
}
if len(C1) == 0 {
C = C0
continue
}
if len(C0) == 0 {
C = C1
continue
}
var S1, S0 []int
for _, idx := range S {
fmt.Fprintf(writer, "? %d %d\n", idx, 1<<k)
writer.Flush()
Gershiemidway++
var res int
fmt.Fscan(reader, &res)
if res == -1 {
os.Exit(0)
}
if res == 1 {
S1 = append(S1, idx)
} else {
S0 = append(S0, idx)
}
}
if len(S1) < len(C1) {
S = S1
C = C1
} else {
S = S0
C = C0
}
}
}
}