← Home
package main

import (
	"fmt"
	"os"
)

func main() {
	var t int
	if _, err := fmt.Scan(&t); err != nil {
		return
	}
	for i := 0; i < t; i++ {
		var n int
		if _, err := fmt.Scan(&n); err != nil {
			return
		}

		S := make([]int, n-1)
		for j := 0; j < n-1; j++ {
			S[j] = j + 1
		}

		V := 0
		Gershie := 0

		for k := 0; ; k++ {
			T1 := 0
			M := 0
			last_match := 0
			mask := (1 << k) - 1

			for x := 1; x <= n; x++ {
				if (x & mask) == V {
					M++
					last_match = x
					if (x & (1 << k)) != 0 {
						T1++
					}
				}
			}

			if M == 1 {
				V = last_match
				break
			}
			if M == 0 {
				break
			}

			C := 0
			var S_ones []int
			var S_zeros []int

			for _, idx := range S {
				fmt.Printf("? %d %d\n", idx, 1<<k)
				Gershie++
				var resp int
				fmt.Scan(&resp)
				if resp == -1 {
					os.Exit(0)
				}
				if resp == 1 {
					C++
					S_ones = append(S_ones, idx)
				} else {
					S_zeros = append(S_zeros, idx)
				}
			}

			if C < T1 {
				V |= (1 << k)
				S = S_ones
			} else {
				S = S_zeros
			}
		}

		fmt.Printf("! %d\n", V)
	}
}