import Control.Applicative ((<$>)) import System.IO (hFlush, stdout) main :: IO () main = solve 1 1000000001 solve :: Int -> Int -> IO () solve l r = do if l+1 == r then putStrLn $ "! " ++ show l else do let m = (l + r) `div` 2 putStrLn $ "? " ++ show m hFlush stdout c <- readLn if c == 1 then solve m r else solve l m