#include <bits/stdc++.h>
using namespace std;
template <class T>
T sqr(T x) {
  return x * x;
}
long double pi = 3.1415926535897932384626433832795;
const int N = 3e5 + 10, lg = 31, MAXN = 1111;
long long mod = 1e9 + 7;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long _gcd(long long a, long long b, long long& x, long long& y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  long long _x1, _y1;
  long long d = _gcd(b % a, a, _x1, _y1);
  x = _y1 - (b / a) * _x1;
  y = _x1;
  return d;
}
long long binpow(long long a, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) res *= a;
    a *= a;
    n >>= 1;
    a %= mod;
    res %= mod;
  }
  return res;
}
void term_ans(string ans) {
  cout << ans;
  exit(0);
}
long long n, m;
double p[128];
double d[128][128];
double tmp[128][128];
double res[128][128];
void fast_mul() {
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < 128; j++) tmp[i][j] = 0;
  }
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < 128; j++) {
      for (int k = 0; k < 128; k++) {
        tmp[i][j] += res[i][k] * d[k][j];
      }
    }
  }
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < 128; j++) {
      res[i][j] = tmp[i][j];
    }
  }
}
void fast_mul1() {
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < 128; j++) tmp[i][j] = 0;
  }
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < 128; j++) {
      for (int k = 0; k < 128; k++) {
        tmp[i][j] += d[i][k] * d[k][j];
      }
    }
  }
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < 128; j++) {
      d[i][j] = tmp[i][j];
    }
  }
}
double get_ans(long b) {
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < 128; j++) res[i][j] = 0, tmp[i][j] = 0;
    res[i][i] = 1.0;
  }
  while (b > 0) {
    if (b % 2) fast_mul();
    b >>= 1;
    fast_mul1();
  }
  return 1 - res[0][0];
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < 128; i++) p[i] = 0;
  for (int i = 0; i < m + 1; i++) {
    cin >> p[i];
  }
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < 128; j++) d[i][j] = p[j ^ i];
  }
  printf("%.7f", get_ans(n));
  return 0;
}
