#include <climits>
#include <iostream>
#include <cstring>
#include <iterator>
using namespace std;
const int N = 30;
const int M = 110;
int a[N];
int dp[N][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));
for(int i=0;i<=n;i++)dp[i][0]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dp[i][j]=dp[i-1][j];
if(j>=a[i])dp[i][j]=min(dp[i][j],dp[i-1][j-a[i]]+1);//因为dp[i][0]=0,故更新后dp[i][j]刚好为1,且j等于a[i];
}
}
if(dp[n][m]==0x3f3f3f3f)cout<<0<<endl;
else cout<<dp[n][m]<<endl;
}
return 0;
}