#include <iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main() {
   int m,n;
   while(cin>>m>>n){
        int *arr=(int *)malloc(sizeof(int)*(n+1));
        for(int i=1;i<=n;++i) cin>>arr[i];
        vector<vector<int>>dp(n+1,vector<int>(m+1,101));  //dp[i][j]表示前i个邮票构成j分最少邮票数,初始化为全101,表示无法构成
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){  
                if(arr[i]>j) dp[i][j]=dp[i-1][j]; //如果票的面值大于当前的j分,不选该票
                else if(arr[i]==j) dp[i][j]=1;  //若相当更改为1
                else {              //若选或者不选都达不到j分,则标记为无法构成
                    if(dp[i-1][j-arr[i]]==101 && dp[i-1][j]==101) dp[i][j]=101;
                    else dp[i][j]=min(dp[i-1][j-arr[i]]+1,dp[i-1][j]);
                } 
            }
        }
        if(dp[n][m]==101) cout<<0<<endl;
        else cout<<dp[n][m];
   }
}