#include <bits/stdc++.h>
using namespace std;
const int iinf = 1e9 + 7;
const int oo = 0x3f3f3f3f;
const long long linf = 1ll << 60;
const double dinf = 1e60;
template <typename T>
inline void scf(T &x) {
  bool f = 0;
  x = 0;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') {
    f = 1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  if (f) x = -x;
  return;
}
template <typename T1, typename T2>
void scf(T1 &x, T2 &y) {
  scf(x);
  return scf(y);
}
template <typename T1, typename T2, typename T3>
void scf(T1 &x, T2 &y, T3 &z) {
  scf(x);
  scf(y);
  return scf(z);
}
template <typename T1, typename T2, typename T3, typename T4>
void scf(T1 &x, T2 &y, T3 &z, T4 &w) {
  scf(x);
  scf(y);
  scf(z);
  return scf(w);
}
inline char mygetchar() {
  char c = getchar();
  while (c == ' ' || c == '\n') c = getchar();
  return c;
}
template <typename T>
inline bool chkmax(T &x, const T &y) {
  return y > x ? x = y, 1 : 0;
}
template <typename T>
inline bool chkmin(T &x, const T &y) {
  return y < x ? x = y, 1 : 0;
}
const int maxn = 105;
int n;
long long K, ans;
long long a[maxn];
vector<long long> hsh;
long long check(long long l, long long r) {
  long long tot = 0, dlt = 0;
  for (int i = (1), _end_ = (n); i <= _end_; ++i) {
    long long stp = a[i] / l;
    if (stp * l < a[i]) ++stp;
    tot += 1ll * (stp * l - a[i]);
    dlt += 1ll * stp;
  }
  if (tot <= K) {
    long long mx = l;
    mx += (long long)(K - tot) / dlt;
    return min(mx, r);
  }
  return -1;
}
int main() {
  scf(n, K);
  for (int i = (1), _end_ = (n); i <= _end_; ++i) scf(a[i]);
  for (int i = (1), _end_ = (n); i <= _end_; ++i) {
    for (long long j = 1; j <= a[i]; ++j) {
      hsh.push_back((a[i] % j == 0) ? a[i] / j : (a[i] / j + 1));
      j = a[i] / (a[i] / j);
    }
    hsh.push_back(a[i] + 1);
  }
  hsh.push_back(1);
  hsh.push_back(200000000000);
  sort(hsh.begin(), hsh.end());
  hsh.resize(unique(hsh.begin(), hsh.end()) - hsh.begin());
  for (int i = ((int)hsh.size() - 2), _end_ = (0); i >= _end_; --i)
    if (~(ans = check(hsh[i], hsh[i + 1] - 1))) break;
  printf("%I64d\n", ans);
  return 0;
}
