#include<iostream>
#include<algorithm>
using namespace std;
const int MAXM=101;
const int MAXN=21;//M是总容量,N是数量
int main()
{
int M,N;
cin>>M;
cin>>N;
int value[MAXN];
fill(value,value+MAXN,1);//注意千万不能通过int value[MAXN]={1}这种方式初始化,因为这种方式只是将第一个元素初始化为1
int price[MAXN];
int dp[MAXM];//这里的dp[j]表示当要凑成的邮票总值为j时所需邮票的最小张数(当dp[j]仍为1000时说明无解)
fill(dp,dp+MAXM,1000);
dp[0]=0;//表示当要凑成0总值时需要0张邮票,这是有意义的所以不能省,不然会报错!!!
for(int i=1;i<=N;i++)
{
cin>>price[i];
}
for(int i=1;i<=N;i++)
{
for(int j=M;j>=price[i];j--)
{
dp[j]=min(dp[j],dp[j-price[i]]+value[i]);
}
}
if(dp[M]==1000)//说明没有这样的邮票选择方式,无解
{
cout<<0<<endl;
}
else
{
cout<<dp[M]<<endl;
}
return 0;
}