#include <bits/stdc++.h>
template <class T>
void rd(T &x) {
  x = 0;
  int f = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
  x *= f;
}
template <class T>
void pt(T x) {
  if (x < 0) putchar('-'), x = (~x) + 1;
  if (x > 9) pt(x / 10);
  putchar(x % 10 ^ 48);
}
template <class T>
T Max(T x, T y) {
  return x > y ? x : y;
}
const int N = 1e6 + 5;
struct matrix {
  double a[128][128];
  matrix() { memset(a, 0, sizeof a); }
  matrix operator*(const matrix &x) const {
    matrix ret;
    for (int i = 0; i < 128; i++)
      for (int k = 0; k < 128; k++)
        for (int j = 0; j < 128; j++) ret.a[i][j] += a[i][k] * x.a[k][j];
    return ret;
  }
  friend matrix qkpow(matrix x, int b) {
    matrix ans;
    for (int i = 0; i < 128; i++) ans.a[i][i] = 1;
    while (b) {
      if (b & 1) ans = ans * x;
      x = x * x;
      b >>= 1;
    }
    return ans;
  }
} t;
int x, n;
double p[N];
int main() {
  rd(n), rd(x);
  for (int i = 0; i <= x; i++) scanf("%lf", &p[i]);
  for (int i = 0; i < 128; i++)
    for (int j = 0; j <= x; j++) t.a[i][i ^ j] = p[j];
  t = qkpow(t, n);
  printf("%.8f\n", 1 - t.a[0][0]);
  return 0;
}
