#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 1) + (x << 3) + c - '0';
    c = getchar();
  }
  return x * f;
}
long long n, m, mp[41][41], K, H, vis[41], Z, d[41], col[41], er;
long long f[1 << 20];
long long ans, pw2[41], t[41];
bool dfs(long long u) {
  bool ok = true;
  for (long long v = 0; v < n; ++v) {
    if (mp[u][v]) {
      if (~col[v]) {
        if (col[u] == col[v]) ok = false;
      } else {
        col[v] = col[u] ^ 1;
        if (!dfs(v)) ok = false;
      }
    }
  }
  return ok;
}
signed main() {
  n = read(), m = read();
  if (m <= 2) {
    printf("0\n");
    return 0;
  }
  for (long long i = 1; i <= m; ++i) {
    long long u = read() - 1, v = read() - 1;
    mp[u][v] = mp[v][u] = 1;
    ++d[u], ++d[v];
    t[u] |= 1LL << v;
    t[v] |= 1LL << u;
  }
  for (long long i = 0; i < n; ++i) Z += d[i] == 0, col[i] = -1;
  pw2[0] = 1;
  for (long long i = 1; i <= n; ++i) {
    pw2[i] = pw2[i - 1] << 1;
  }
  er = 1;
  for (long long i = 0; i < n; ++i) {
    if (!~col[i]) {
      col[i] = 0;
      if (!dfs(i)) er = 0;
      ++H;
    }
  }
  ans = pw2[n] - pw2[H];
  ans += pw2[Z] << 1;
  if (er) ans += pw2[H];
  K = (n >> 1);
  for (long long i = 0; i < (1 << K); ++i) {
    bool ok = true;
    for (long long j = 0; j < K; ++j) {
      if (i >> j & 1) {
        if (t[j] & i) {
          ok = false;
          break;
        }
      }
    }
    if (ok) ++f[i];
  }
  for (long long j = 0; j < K; ++j) {
    for (long long i = 0; i < (1 << K); ++i) {
      if (i >> j & 1) f[i] += f[i ^ (1 << j)];
    }
  }
  long long tmp = 0;
  for (long long i = 0; i < (1 << n - K); ++i) {
    bool ok = true;
    long long st = 0;
    for (long long j = 0; j < n - K; ++j) {
      if (i >> j & 1) {
        if (t[j + K] >> K & i) {
          ok = false;
          break;
        }
        st |= t[j + K] & ((1 << K) - 1);
      }
    }
    if (ok) {
      tmp += f[st ^ ((1 << K) - 1)];
    }
  }
  ans -= tmp << 1;
  printf("%lld\n", ans);
  return 0;
}
