#include <bits/stdc++.h>
using namespace std;
bool visitado[55];
vector<int> grafo[55];
long long int peligro = 1;
void dfs(int nodo) {
  visitado[nodo] = true;
  for (int i = 0; i < grafo[nodo].size(); ++i) {
    int vecino = grafo[nodo][i];
    if (!visitado[vecino]) {
      peligro *= 2;
      dfs(vecino);
    }
  }
}
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    grafo[x - 1].push_back(y - 1);
    grafo[y - 1].push_back(x - 1);
  }
  memset(visitado, 0, sizeof visitado);
  for (int i = 0; i < n; i++) {
    if (!visitado[i]) dfs(i);
  }
  cout << peligro << '\n';
  return 0;
}
