← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	fmt.Fscan(in, &n)

	query := func(l, r int) int {
		fmt.Fprintf(out, "? %d %d\n", l, r)
		out.Flush()
		var x int
		if _, err := fmt.Fscan(in, &x); err != nil || x == -1 {
			os.Exit(0)
		}
		return x
	}

	answer := func(pos int) {
		fmt.Fprintf(out, "! %d\n", pos)
		out.Flush()
	}

	s := query(1, n)

	if s == 1 {
		l, r := 2, n
		for l < r {
			m := (l + r) / 2
			if query(s, m) == s {
				r = m
			} else {
				l = m + 1
			}
		}
		answer(l)
		return
	}

	if s == n {
		l, r := 1, n-1
		for l < r {
			m := (l + r + 1) / 2
			if query(m, s) == s {
				l = m
			} else {
				r = m - 1
			}
		}
		answer(l)
		return
	}

	if query(1, s) == s {
		l, r := 1, s-1
		for l < r {
			m := (l + r + 1) / 2
			if query(m, s) == s {
				l = m
			} else {
				r = m - 1
			}
		}
		answer(l)
	} else {
		l, r := s+1, n
		for l < r {
			m := (l + r) / 2
			if query(s, m) == s {
				r = m
			} else {
				l = m + 1
			}
		}
		answer(l)
	}
}
```