#include <bits/stdc++.h>
using namespace std;
int ci(int a, int b) { return (a + b - 1) / b; }
double comb_(int a, int b) {
  if (a == 0) return 1;
  return comb_(a - 1, b - 1) * b / a;
}
double comb_cache[60][60];
double comb(int a, int b) {
  double &ret = comb_cache[a][b];
  if (ret >= -0.5)
    return ret;
  else
    return ret = comb_(a, b);
}
double fact(int n) {
  if (n == 0) return 1;
  return n * fact(n - 1);
}
double solve(int cur, int rest, int len, bool op, const vector<int> &bs,
             vector<vector<double> > &tbl) {
  int m = bs.size();
  if (cur == m - 1) {
    return (op ? len >= ci(rest, bs[cur]) : len <= ci(rest, bs[cur]));
    ;
  }
  double &ret = tbl[cur][rest];
  if (ret > -0.5) return ret;
  ret = 0;
  for (int i = 0; i <= rest; i++) {
    double rpos = m - cur;
    double prob = comb(i, rest) * pow(1.0 / rpos, i) *
                  pow((rpos - 1.0) / rpos, (rest - i));
    double r = solve(cur + 1, rest - i, len, op, bs, tbl);
    int c = ci(i, bs[cur]);
    if (op) {
      if (c > len)
        ret += 0;
      else
        ret += r * prob;
    } else {
      if (c < len)
        ret += r * prob;
      else
        ret += prob;
    }
  }
  return ret;
}
int main() {
  int n, m;
  cin >> n >> m;
  vector<int> bs(m);
  for (int i = 0; i < m; i++) cin >> bs[i];
  for (int i = 0; i < 60; i++)
    for (int j = 0; j < 60; j++) comb_cache[i][j] = -1;
  double ans = 0;
  for (int i = 0; i <= n; i++) {
    double t = 0;
    {
      vector<vector<double> > tbl(m + 1, vector<double>(n + 1, -1));
      t += solve(0, n, i, true, bs, tbl);
    }
    {
      vector<vector<double> > tbl(m + 1, vector<double>(n + 1, -1));
      t += solve(0, n, i, false, bs, tbl);
    }
    ans += i * (t - 1);
  }
  cout << setiosflags(ios::fixed) << setprecision(12);
  cout << ans << endl;
  return 0;
}
