#include <bits/stdc++.h>
using namespace std;
static const double EPS = 1e-12;
double mem[100][100][2];
double cmem[100][100];
void combInit(void) {
  for (int i = 0; i < (100); ++i)
    for (int j = 0; j < (100); ++j) cmem[i][j] = -1.0;
}
double comb(int n, int m) {
  if (n == m) return 1.0;
  if (m == 0) return 1.0;
  double &ret = cmem[n][m];
  if (ret < -0.5) ret = comb(n - 1, m) + comb(n - 1, m - 1);
  return ret;
}
int ceilD(int a, int b) { return (a + b - 1) / b; }
double solve(int left, int p, bool ok, int maxL, vector<int> &A) {
  if (p == (int)A.size()) return left == 0 && ok;
  double &ret = mem[left][p][ok];
  int T = A[p] * maxL;
  if (ret < -0.5) {
    int maxI = min(left, T);
    ret = 0.0;
    for (int i = (0); i <= (maxI); ++i) {
      ret += comb(left, i) *
             solve(left - i, p + 1, (ok || ceilD(i, A[p]) == maxL), maxL, A);
    }
  }
  return ret;
}
double getCount(int n, int maxL, vector<int> &A) {
  for (int i = 0; i < (100); ++i)
    for (int j = 0; j < (100); ++j)
      for (int k = 0; k < (2); ++k) mem[i][j][k] = -1.0;
  return solve(n, 0, false, maxL, A);
}
int main(void) {
  combInit();
  int n, m;
  cin >> n >> m;
  vector<int> A(m);
  for (int i = 0; i < (m); ++i) {
    cin >> A[i];
  }
  double totS = pow((double)m, (double)n);
  double tot = 0.0;
  for (int maxL = (1); maxL <= (n); ++maxL) {
    tot += (double)maxL * getCount(n, maxL, A);
  }
  printf("%.10lf\n", tot / totS);
  return 0;
}
