#include <bits/stdc++.h>
using namespace std;
unordered_set<int> ms;
vector<int> alt;
vector<int> ust;
int main() {
  int des, n;
  scanf("%d%d", &des, &n);
  int a;
  for (int i = 0; i < n; i++) {
    scanf("%d", &a);
    a = des - a;
    if (a < 0) {
      if (ms.insert(a).second) {
        alt.push_back(a);
      }
    } else if (a > 0) {
      if (ms.insert(a).second) {
        ust.push_back(a);
      }
    } else {
      cout << "1" << endl;
      return 0;
    }
  }
  if (alt.size() == 0 || ust.size() == 0) {
    cout << "-1";
    return 0;
  }
  queue<int> qu;
  for (int i = 0; i < alt.size(); i++) {
    qu.push(alt[i]);
  }
  for (int i = 0; i < ust.size(); i++) {
    qu.push(ust[i]);
  }
  int c = 1;
  while (!qu.empty()) {
    int s = qu.size();
    for (int i = 0; i < s; i++) {
      for (int i = 0; i < alt.size(); i++) {
        if (ms.insert(qu.front() + alt[i]).second) {
          qu.push(qu.front() + alt[i]);
        }
      }
      for (int i = 0; i < ust.size(); i++) {
        if (ms.insert(qu.front() + ust[i]).second) {
          qu.push(qu.front() + ust[i]);
        }
      }
      qu.pop();
    }
    c++;
    if (ms.find(0) != ms.end()) break;
  }
  cout << c;
  return 0;
}
