#include <bits/stdc++.h>
using namespace std;
int n, m;
int X[51];
long double C[51][51];
long double prob[51];
long double mem[51][51];
bool done[51][51];
int limit;
long double dfs(int cur, int lef) {
  if (lef == 0) return 1.0;
  if (cur == m) {
    if (lef <= X[cur] * limit) return 1.0;
    return 0.0;
  }
  if (done[cur][lef]) return mem[cur][lef];
  mem[cur][lef] = 0;
  long double p1 = 1.0 / (long double)(m - cur + 1);
  long double p2 = 1.0 - p1;
  for (int i = 0; i <= min(lef, X[cur] * limit); i++)
    mem[cur][lef] +=
        (pow(p1, i) * pow(p2, lef - i) * C[lef][i]) * dfs(cur + 1, lef - i);
  done[cur][lef] = true;
  return mem[cur][lef];
}
int main() {
  cout << fixed << setprecision(20);
  memset(C, 0, sizeof(C));
  C[0][0] = 1;
  for (int i = 1; i <= 50; i++) {
    C[i][0] = 1;
    C[i][i] = 1;
    for (int j = 1; j < i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  }
  while (cin >> n >> m) {
    for (int i = 1; i <= m; i++) cin >> X[i];
    memset(prob, 0, sizeof(prob));
    for (int i = 1; i <= 50; i++) {
      limit = i;
      memset(done, false, sizeof(done));
      prob[i] = dfs(1, n);
    }
    long double ans = 0;
    for (int i = 1; i <= 50; i++) ans += (double)i * (prob[i] - prob[i - 1]);
    cout << ans << endl;
  }
  return 0;
}
