#include <bits/stdc++.h>
using namespace std;
void read(long long &x) {
  long long f = 1;
  char c = getchar();
  x = 0;
  while (c < '0' || c > '9') {
    if (c == '-') f = -f;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 1) + (x << 3) + c - '0';
    c = getchar();
  }
  x *= f;
  return;
}
void print(long long x) {
  if (x < 10) {
    putchar(x + '0');
    return;
  }
  print(x / 10);
  putchar(x % 10 + '0');
}
void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  print(x);
}
long long mint(long long a, long long b) { return a < b ? a : b; }
long long maxt(long long a, long long b) { return a > b ? a : b; }
long long n, m;
double dp[55][55][55], ans, c[55][55], p[55][55];
long long a[55];
int main() {
  read(n), read(m);
  for (int i = 1; i <= m; i++) scanf("%lld", &a[i]);
  c[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    c[i][0] = c[i][i] = 1;
    for (int j = 1; j < i; j++) c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
  }
  for (int i = 1; i <= m; i++) {
    p[i][0] = 1;
    for (int j = 1; j <= n; j++) p[i][j] = p[i][j - 1] * i;
  }
  dp[0][0][0] = 1;
  for (int i = 0; i < m; i++)
    for (int j = 0; j <= n; j++)
      for (int k = 0; k <= n; k++)
        for (int l = 0; l <= (n - j); l++)
          dp[i + 1][j + l][maxt((l / a[i + 1]) + ((l % a[i + 1]) ? 1 : 0),
                                k)] += dp[i][j][k] / p[m][l] * c[n - j][l];
  for (int i = 0; i <= n; i++) ans += i * (dp[m][n][i]);
  printf("%.20lf", ans);
}
