#include <bits/stdc++.h>
using namespace std;
template <class T>
inline string tostring(T a) {
  ostringstream sout;
  sout << a;
  return sout.str();
}
template <class T>
T gcd(T a, T b) {
  return a == 0 ? b : gcd(b % a, a);
}
template <class T>
void operator>>(istream &a, vector<T> &b) {
  for (int i = 0; i < b.size(); i++) a >> b[i];
}
double r[51][51];
double pp(double p, int n, int k) {
  if (k == 0) return r[n][k] * pow(1 - p, n - k);
  if (n == k) return r[n][k] * pow(p, k);
  return r[n][k] * pow(p, k) * pow(1 - p, n - k);
}
int main() {
  memset(r, 1.0, sizeof(r));
  r[0][0] = 1;
  for (int i = 1; i < 51; i++)
    for (int j = 0; j <= i; j++) {
      r[i][j] += r[i - 1][j] + r[i - 1][j - 1];
    }
  int m, n;
  cin >> n >> m;
  vector<int> p(m);
  cin >> p;
  vector<vector<vector<double> > > dp(
      m, vector<vector<double> >(n + 1, vector<double>(n + 1, 0.0)));
  for (int i = 0; i <= n; i++) {
    dp[0][i][(i + p[0] - 1) / p[0]] += pp(1. / m, n, i);
  }
  for (int i = 0; i < m - 1; i++) {
    for (int j = 0; j <= n; j++) {
      for (int q = 0; q <= n; q++) {
        for (int k = 0; k + j <= n; k++) {
          dp[i + 1][j + k][max((k + p[i + 1] - 1) / p[i + 1], q)] +=
              dp[i][j][q] * pp(1. / (m - i - 1), n - j, k);
        }
      }
    }
  }
  double ans = 0;
  for (int i = 0; i <= n; i++) {
    ans += dp[m - 1][n][i] * i;
  }
  printf("%.9f\n", ans);
}
