--- /dev/null
+import Data.List
+-- import Data.Ord
+import Data.Traversable
+import Control.Applicative
+
+
+main :: IO ()
+main = do
+ line1 <- getLine
+ line2 <- getLine
+ let params = map (read :: String -> Int) $ words line1
+ let required = params !! 1
+ let machines = map read $ words line2
+ -- print required
+ -- print machines
+ print $ solve required machines
+
+solve :: Int -> [Int] -> Int
+solve required machines
+ | required <= minProduction = minTime -- (required, minTime, minTime)
+ | otherwise = binarySearchTime required minTime maxTime machines
+ where minTime = minimum machines
+ minProduction = productionAtTime minTime machines
+ maxTime = findMaxTime required minTime machines
+
+findMaxTime :: Int -> Int -> [Int] -> Int
+findMaxTime required minTime machines
+ | required <= productionAtTime maxTime machines = maxTime
+ | otherwise = findMaxTime required maxTime machines
+ where maxTime = minTime * 2
+
+binarySearchTime required minTime maxTime machines
+ | minTime == maxTime = minTime
+ | midProduction < required = binarySearchTime required (midTime + 1) maxTime machines
+ | midProduction >= required = binarySearchTime required minTime midTime machines
+ where midTime = (minTime + maxTime) `div` 2
+ midProduction = productionAtTime midTime machines
+
+productionAtTime :: Int -> [Int] -> Int
+productionAtTime time machines = sum $ fmap go machines
+ where go machine = time `div` machine