#include <bits/stdc++.h>
using namespace std;
struct matrix {
  int x, y;
  double v[131][131];
} st, t;
int n, x;
double p[131];
matrix operator*(matrix a, matrix b) {
  matrix c;
  memset(c.v, 0, sizeof(c.v));
  c.x = a.x, c.y = b.y;
  for (int i = 1; i <= c.x; i++)
    for (int j = 1; j <= c.y; j++)
      for (int k = 1; k <= a.y; k++) c.v[i][j] += a.v[i][k] * b.v[k][j];
  return c;
}
matrix mqpow(matrix a, int p) {
  matrix t;
  t.x = t.y = a.x;
  memset(t.v, 0, sizeof(t.v));
  for (int i = 1; i <= t.x; i++) t.v[i][i] = 1;
  while (p) {
    if (p & 1) t = t * a;
    p >>= 1;
    a = a * a;
  }
  return t;
}
int main() {
  scanf("%d%d", &n, &x);
  int mx = (1 << ((int)log2(x) + 1)) - 1;
  st.x = 1, st.y = mx + 1;
  for (int i = 0; i <= x; i++) scanf("%lf", &p[i]), st.v[1][i + 1] = p[i];
  if (n == 1) {
    printf("%.7lf\n", 1.0 - p[0]);
    return 0;
  }
  t.x = t.y = mx + 1;
  for (int i = 0; i <= mx; i++)
    for (int j = 0; j <= mx; j++) t.v[i + 1][j + 1] = p[i ^ j];
  st = st * mqpow(t, n - 1);
  printf("%.8lf\n", 1.0 - st.v[1][1]);
  return 0;
}
