#include <bits/stdc++.h>
using namespace std;
const int maxn = 200;
typedef long double matrix[maxn][maxn];
typedef long double vec[maxn];
matrix a;
vec f;
long double P[maxn];
int M, n, i, j;
void mul(matrix a, matrix b, matrix res) {
  matrix c = {0};
  int i, j, k;
  for (i = 0; i <= n; i++)
    for (j = 0; j <= n; j++)
      for (k = 0; k <= n; k++) c[i][j] += a[i][k] * b[k][j];
  memcpy(res, c, sizeof(c));
}
void mul(vec f, matrix a, vec res) {
  vec c = {0};
  int i, j;
  for (i = 0; i <= n; i++)
    for (j = 0; j <= n; j++) c[i] += f[j] * a[j][i];
  memcpy(res, c, sizeof(c));
}
void ksm(matrix a, int b, matrix res) {
  matrix t = {0};
  int i;
  for (i = 0; i <= n; i++) t[i][i] = 1;
  while (b) {
    if (b & 1) mul(t, a, t);
    mul(a, a, a);
    b >>= 1;
  }
  memcpy(res, t, sizeof(t));
}
int main() {
  scanf("%d%d", &M, &n);
  for (i = 0; i <= n; i++) {
    double x;
    scanf("%lf", &x);
    P[i] = x;
  }
  n = 150;
  for (i = 0; i <= n; i++)
    for (j = 0; j <= n; j++) a[i][j] = P[i ^ j];
  f[0] = 1;
  ksm(a, M, a);
  mul(f, a, f);
  double x = 1 - f[0];
  printf("%.8lf", x);
  return 0;
}
