#include <bits/stdc++.h>
using namespace std;
template <typename Tp>
inline void rd(Tp &x) {
  x = 0;
  unsigned long long fh = 1;
  char ch = 1;
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') fh = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  x *= fh;
}
const unsigned long long mod = 998244353;
template <typename Tp>
inline void smax(Tp &x, Tp y) {
  if (x < y) x = y;
}
template <typename Tp>
inline void smin(Tp &x, Tp y) {
  if (x > y) x = y;
}
template <typename Tp>
inline void chkadd(Tp &x, Tp y) {
  x = (x + y) % mod;
}
const unsigned long long maxn = 50 + 7;
unsigned long long n, m;
unsigned long long a[maxn];
inline void Init(void) {
  rd(n);
  rd(m);
  for (unsigned long long i = 1; i <= m; i++) rd(a[i]);
}
unsigned long long C[maxn][maxn];
double dp[maxn][maxn][maxn];
inline void Work(void) {
  C[0][0] = 1;
  for (unsigned long long i = 1; i <= 50; i++) {
    C[i][0] = 1;
    for (unsigned long long j = 1; j <= i; j++)
      C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  }
  dp[0][0][0] = 1;
  for (unsigned long long i = 1; i <= m; i++) {
    for (unsigned long long j = 0; j <= n; j++) {
      for (unsigned long long k = 0; k <= j; k++) {
        for (unsigned long long p = 0; p <= n - j; p++) {
          dp[i][j + p][max(k, (p + a[i] - 1) / a[i])] +=
              dp[i - 1][j][k] * (double)C[n - j][p];
        }
      }
    }
  }
  double cnt = 0;
  for (unsigned long long i = 0; i <= n; i++) cnt += dp[m][n][i];
  double ans = 0;
  for (unsigned long long i = 0; i <= n; i++) {
    ans += (double)i * (double)dp[m][n][i] / (double)cnt;
  }
  printf("%.20lf\n", ans);
}
signed main(void) {
  Init();
  Work();
  return 0;
}
