#include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,a,b) for(int i=a;i<(int)b;i++) #define rep(i,n) REP(i,0,n) typedef long long ll; typedef unsigned long long ull; int N, C; int A[101]; int constexpr invalid = std::numeric_limits::max() / 6; int memo[1010000]; int solve(int csum, int i, int xsum) { int& ret = memo[csum]; if(ret < invalid) { return ret; } if(i == -1) { if(csum == 0) { return ret = xsum; } else { return invalid; } } if(csum < 0) { return invalid; } for(int x = csum / A[i]; x >= 0; x--) { ret = min(ret, solve(csum - A[i] * x, i-1, xsum + x)); } return ret; } int main() { rep(i, 1010000) memo[i] = invalid; cin >> C >> N; rep(i, N) cin >> A[i]; sort(A, A+N); auto ret = solve(C, N-1, 0); if(ret == invalid) { cout << -1 << endl; } else { cout << ret << endl; } return 0; }