#include <bits/stdc++.h>
using namespace std;
int vis[1000], G[1000][1000], n, m;
int dfs(int x) {
  vis[x] = 1;
  int tot = 1;
  for (int i = 0; i < n; i++)
    if (i != x && G[x][i] && !vis[i]) tot += dfs(i);
  return tot;
}
int main() {
  ios::sync_with_stdio(false);
  int v1, v2;
  while (cin >> n >> m) {
    memset(vis, 0, sizeof(vis));
    memset(G, 0, sizeof(G));
    for (int i = 0; i < m; i++) {
      cin >> v1 >> v2;
      v1--;
      v2--;
      G[v1][v2] = G[v2][v1] = 1;
    }
    long long ans = 1;
    for (int i = 0; i < n; i++)
      if (!vis[i]) {
        int tot = dfs(i) - 1;
        for (int j = 0; j < tot; j++) ans = ans << 1ll;
      }
    cout << ans << endl;
  }
  return 0;
}
