#include <bits/stdc++.h>
using namespace std;
const int Mod = 1e9 + 7;
const int MAX_N = 130;
const int inf = 0x3f3f3f3f;
int m, n, x;
double p[130], ans[130];
struct Matrix {
  int row, col;
  double data[MAX_N][MAX_N];
  Matrix operator*(const Matrix& rhs) const {
    Matrix ret;
    ret.row = row, ret.col = rhs.col;
    memset(ret.data, 0, sizeof(ret.data));
    for (int i = 0; i < ret.row; ++i) {
      for (int j = 0; j < ret.col; ++j) {
        for (int k = 0; k < rhs.row; ++k) {
          ret.data[i][j] += data[i][k] * rhs.data[k][j];
        }
      }
    }
    return ret;
  }
  Matrix operator^(const int& len) const {
    Matrix ret, tmp;
    ret.row = ret.col = tmp.row = tmp.col = row;
    memset(ret.data, 0, sizeof(ret.data));
    for (int i = 0; i < row; ++i) {
      ret.data[i][i] = 1;
    }
    for (int i = 0; i < row; ++i) {
      for (int j = 0; j < col; ++j) {
        tmp.data[i][j] = data[i][j];
      }
    }
    int mm = len;
    while (mm) {
      if (mm & 1) ret = ret * tmp;
      tmp = tmp * tmp;
      mm >>= 1;
    }
    return ret;
  }
};
int main() {
  Matrix tmp;
  memset(p, 0, sizeof(p));
  ;
  cin >> n >> x;
  int knt = 1;
  while (knt <= x) knt *= 2;
  tmp.row = tmp.col = knt;
  for (int i = 0; i <= x; i++) cin >> p[i];
  for (int i = 0; i <= knt; i++) {
    for (int j = 0; j <= knt; j++) {
      tmp.data[i][j] = p[i ^ j];
    }
  }
  tmp = tmp ^ (n - 1);
  double ans = 0.0;
  for (int i = 0; i <= x; i++) ans += tmp.data[0][i] * p[i];
  printf("%.10lf\n", 1.0 - ans);
  return 0;
}
