#include <bits/stdc++.h>
using namespace std;
int deg[100];
vector<int> gp[110];
int pushed[100];
int parent[110], cnt[110];
int find_parent(int u) {
  if (parent[u] == u) return u;
  return parent[u] = find_parent(parent[u]);
}
int main() {
  long long n, m;
  cin >> n >> m;
  for (int i = 1; i <= n; i++) parent[i] = i;
  for (int i = 0; i < m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    int a = find_parent(x);
    int b = find_parent(y);
    if (a != b) {
      parent[b] = a;
    }
  }
  long long ans = 1;
  vector<int> v;
  for (int i = 1; i <= n; i++) {
    find_parent(i);
    if (parent[i] == i) {
      v.push_back(parent[i]);
    }
    cnt[parent[i]]++;
  }
  for (int j = 0; j < v.size(); j++) {
    for (int i = 1; i < cnt[v[j]]; i++) ans *= 2;
  }
  cout << ans << endl;
  return 0;
}
