{-# LANGUAGE BangPatterns #-}
import Control.Applicative ((<$>))
import Data.Array (listArray, (!))
import Data.List (sort)

main :: IO ()
main = do
    [n,m] <- getInts
    cs <- getInts
    print $ solve n m $ sort cs

getInts :: IO [Int]
getInts = map read . words <$> getLine

solve :: Int -> Int -> [Int] -> Int
solve n m cs = table (n,m-1)
    where
        idx (!x,!y) = x + y*(n+1)
        xdi i = let x = i`mod`(n+1)
                    y = i`div`(n+1)
                 in x `seq` y `seq` (x,y)
        table = (listArray (0,idx (n,m-1)) (map (f.xdi) [0..idx (n,m-1)]) !) . idx
        f (!x,0) = x
        f (!x,!y) = if c > x then table (x,y-1)
                             else let res1 = table (x,y-1)
                                      res2 = table (x-c,y) + 1
                                   in res1 `seq` res2 `seq` min res1 res2
            where c = cs !! y