#include <climits>
#include <iostream>
#include <cstring>
#include <iterator>
using namespace std;
const int N = 30;
const int M = 110;
int a[N];
int dp[M];
int main(){
/*
dp[i][j]表示前i张邮票构成的邮票总值为j的所需要的最少邮票数
每张邮票选or不选:
不选:dp[i][j]=dp[i-1][j]
选:dp[i][j]=dp[i-1][j-a[i]]+1
dp[n][m]为构成m总值的邮票最少数
dp[n][m]=INT_MAX 表示无解
*/
int n,m;
while(cin>>m>>n){
for(int i=1;i<=n;i++)cin>>a[i];
memset(dp,0x3f,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++){
for(int j=m;j>=0;j--){
if(j>=a[i])dp[j]=min(dp[j],dp[j-a[i]]+1);//因为dp[i][0]=0,故更新后dp[i][j]刚好为1,且j等于a[i];
}
}
if(dp[m]==0x3f3f3f3f)cout<<0<<endl;
else cout<<dp[m]<<endl;
}
return 0;
}