#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];
}
}