#include <bits/stdc++.h>
using namespace std;
template <typename Int>
ostream& operator<<(ostream& s, vector<Int>& v) {
  s << '[';
  for (auto i = v.begin(); i != v.end(); i++) {
    s << *i;
    if (i != prev(v.end())) s << ", ";
  }
  s << ']';
  return s;
}
template <typename Int, typename INT>
ostream& operator<<(ostream& s, map<Int, INT>& mp) {
  s << '[';
  for (auto& i : mp) {
    s << '[' << i.first << ", " << i.second << ']';
    if (i != *mp.rbegin()) s << ", ";
  }
  s << ']';
  return s;
}
template <typename Int>
ostream& operator<<(ostream& s, set<Int>& st) {
  s << '[';
  for (auto& i : st) {
    s << i;
    if (i != *st.rbegin()) s << ", ";
  }
  s << ']';
  s << '\n';
  return s;
}
ofstream file("debug.txt");
const int MAX = 51;
int n, m, a[MAX];
double dp[MAX][MAX][MAX], nCr[MAX][MAX];
double solve(int i = 0, int j = n, int mx = 0) {
  if (i == m) return j ? 0 : mx;
  double& ret = dp[i][j][mx];
  if (ret == ret) return ret;
  double p = 1;
  ret = 0;
  for (int tk = 0; tk <= j; tk++, p /= m)
    ret +=
        nCr[j][tk] * p * solve(i + 1, j - tk, max(mx, (tk + a[i] - 1) / a[i]));
  return ret;
}
int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(0);
  for (int i = 0; i < MAX; i++) nCr[i][0] = 1;
  for (int i = 1; i < MAX; i++)
    for (int j = 1; j <= i; j++) nCr[i][j] = nCr[i - 1][j - 1] + nCr[i - 1][j];
  cin >> n >> m;
  for (int i = 0; i < m; i++) cin >> a[i];
  memset(dp, -1, sizeof dp);
  cout << fixed << setprecision(20) << solve();
}
