#include <bits/stdc++.h>
using namespace std;
const int N = 40;
const int inf = 1e9 + 7;
int was[N], were[N], sz, dp[(1 << (N / 2))], g[N][N], n, m, gg;
long long key[N];
vector<int> gz[N];
void dfs(int v, int pr = -1, int len = 0) {
  was[v] = 1;
  sz += 1;
  were[v] = len;
  for (int to : gz[v]) {
    if (was[to] != 1) {
      dfs(to, v, len ^ 1);
    } else {
      if (were[v] == were[to]) {
        gg = 1;
      }
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  if (m == 0) return cout << 0, 0;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    x -= 1, y -= 1;
    g[x][y] = g[y][x] = 1;
    gz[x].push_back(y);
    gz[y].push_back(x);
    key[x] |= (1ll << (y * 1ll));
    key[y] |= (1ll << (x * 1ll));
  }
  long long ans = (1ll << (n * 1ll));
  for (int i = 0, j = 0, jj = 0; i <= n; i++) {
    if (i == n) {
      ans += (1ll << (jj + 1ll));
      if (!gg) ans += (1ll << (jj + j * 1ll));
      ans -= (1ll << (jj + j * 1ll));
      break;
    }
    if (was[i]) continue;
    dfs(i);
    if (sz != 1)
      j += 1;
    else
      jj += 1;
    sz = 0;
  }
  long long res = 0;
  long long fh = n / 2, sh = n - n / 2;
  for (int i = 0; i < (1 << fh); i++) {
    int add = 1;
    for (int k = 0; k < fh; k++) {
      if ((i >> k) & 1) {
        if (i & key[k]) {
          add = 0;
        }
      }
    }
    dp[i] += add;
    res += add;
  }
  for (int i = 0; i < fh; i++) {
    for (int j = 0; j < (1 << fh); j++) {
      if ((j >> i) & 1) dp[j] += dp[j ^ (1 << i)];
    }
  }
  for (long long i = 0; i < (1 << sh); i++) {
    int add = (i != 0);
    for (int j = 0; j < sh; j++) {
      if ((i >> j) & 1) {
        if ((i << fh) & key[j + fh]) add = 0;
      }
    }
    if (add) {
      long long pat = 0, all = 0;
      for (int j = 0; j < sh; j++) {
        if ((i >> j) & 1) all |= key[fh + j];
      }
      for (int j = 0; j < fh; j++) {
        if (!((all >> j) & 1)) {
          pat += (1 << j);
        }
      }
      res += dp[pat];
    }
  }
  ans -= res * 2;
  cout << ans;
}
