#include <iostream>
#include <vector>
#include <climits>
using namespace std;

int main() {
    int M, N;
    while (cin >> M) {
        cin >> N;
        vector<int> stamps(N);
        for (int i = 0; i < N; ++i) {
            cin >> stamps[i];
        }

        // 初始化dp数组,dp[i]表示凑成总值i所需的最少邮票张数
        vector<int> dp(M + 1, INT_MAX);
        dp[0] = 0; // 凑成总值0不需要任何邮票

        // 动态规划填表
        for (int i = 0; i < N; ++i) {
            for (int j = M; j >= stamps[i]; --j) {
                if (dp[j - stamps[i]] != INT_MAX) {
                    dp[j] = min(dp[j], dp[j - stamps[i]] + 1);
                }
            }
        }

        // 输出结果
        if (dp[M] == INT_MAX) {
            cout << 0 << endl; // 无法凑成总值M
        } else {
            cout << dp[M] << endl; // 输出最少邮票张数
        }
    }
    return 0;
}