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