#include using namespace std; template using vec = vector; template using vvec = vec>; template using lqueue = priority_queue, greater>; template using gqueue = priority_queue, less>; int main() { constexpr int inf = INT_MAX / 4; int c, n; cin >> c >> n; vec a(n); for (auto &e : a) cin >> e; vec dist(c + 1, inf); lqueue> que; dist[0] = 0; que.push({ 0, 0 }); while (!que.empty()) { auto [cost, vertex] = que.top(); que.pop(); for (auto d : a) { int next = vertex + d; if (c < next || dist[next] <= dist[vertex] + 1) continue; dist[next] = dist[vertex] + 1; que.push({ dist[next], next }); } } if (dist[c] == inf) { cout << -1 << endl; } else { cout << dist[c] << endl; } }