#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:64000000")
char ch[1 << 20];
string gs() {
  scanf("%s", ch);
  return string(ch);
}
long long gcd(long long a, long long b) { return (!a) ? b : gcd(b % a, a); }
const double pi = 3.1415956535897935384656433835795;
const double eps = 1e-8;
int LIM;
int n, m;
int A[64];
double C[64][64];
double P[64];
double dp[64][64];
int was[64][64];
double rec(int p, int z) {
  if (m == p) return (z == 0) ? 1.0 : 0.0;
  if (z == 0) return 1;
  if (!was[p][z]) {
    was[p][z] = 1;
    double& r = dp[p][z];
    r = 0;
    for (int a = (0), _b = (z + 1); a < _b; ++a) {
      int o = (a + A[p] - 1) / A[p];
      if (o > LIM) continue;
      r += C[z][a] * rec(p + 1, z - a);
    }
  }
  return dp[p][z];
}
int main(int argn, char** argv) {
  P[0] = 1.0;
  C[0][0] = 1;
  for (int i = (1), _b = (64); i < _b; ++i) {
    C[i][i] = C[i][0] = 1;
    for (int j = (1), _b = (i); j < _b; ++j)
      C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
  }
  scanf("%d%d", &n, &m);
  for (int i = (0), _b = (m); i < _b; ++i) scanf("%d", A + i);
  double R[128];
  double sum = 0;
  R[0] = 0;
  double last = 0.0;
  for (int i = (1), _b = (128); i < _b; ++i) {
    memset((was), (0), sizeof(was));
    LIM = i;
    R[i] = rec(0, n);
    double v = R[i];
    R[i] -= last;
    last = v;
    sum += R[i];
  }
  double r = 0.0;
  for (int i = (0), _b = (128); i < _b; ++i) r += (double)i * R[i];
  r /= sum;
  printf("%.20lf\n", r);
  return 0;
}
