#include <bits/stdc++.h>
using namespace std;
int inline in() {
  int x;
  scanf("%d", &x);
  return x;
}
long long inline lin() {
  long long x;
  scanf("%I64d", &x);
  return x;
}
void P(long long x) { printf("%I64d", x); }
long long fx[] = {0, 0, -1, 1};
long long fy[] = {-1, 1, 0, 0};
map<long long, long long> na;
vector<long long> V[55];
long long a[110], n, m, c, r = 0;
bool vis[55];
void F(long long s) {
  long long j;
  vis[s] = 1;
  c++;
  if (V[s].size() == 0) return;
  for (j = 0; j <= V[s].size() - 1; j++) {
    long long v = V[s][j];
    if (vis[v] == 0) {
      F(v);
    }
  }
  return;
}
int main() {
  long long i, j, k;
  n = lin();
  m = lin();
  for (i = 1; i <= m; i++) {
    long long x = lin();
    long long y = lin();
    V[x].push_back(y);
    V[y].push_back(x);
  }
  long long res = 1;
  for (i = 1; i <= n; i++) {
    c = 0;
    F(i);
    for (j = 2; j <= c; j++) {
      res *= 2;
    }
  }
  P(res);
  return 0;
}
