import Control.Monad import qualified Data.Map.Strict as M extendS s m | Just (k,v) <- M.lookupLT s m, v >= s-1 = k | otherwise = s extendE e m | Just (k,v) <- M.lookupLE (e+1) m, v > e = v | otherwise = e deleteR s e m | Just (k,v) <- M.lookupGE s m, v <= e = deleteR s e (M.delete k m) | otherwise = m solve (x,m) [a,b] = (max x (e-s+1), M.insert s e $ deleteR s e m) where s = extendS a m e = extendE b m main = do [d,q] <- map read . words <$> getLine qs <- replicateM q $ map read . words <$> getLine mapM_ (print . fst) $ tail $ scanl solve (0,M.empty) qs