#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair<int, int>;
using vi = vector<int>;
set<int> ns;
vector<set<int>> adj;
void dfs(int v) {
  for (auto it = ns.begin(); it != ns.end();) {
    int u = *it;
    if (!adj[v].count(*it)) {
      ns.erase(it);
      dfs(u);
      it = ns.upper_bound(u);
    } else {
      it++;
    }
  }
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  int i, n, j, k, l, m;
  cin >> n >> m;
  adj.resize(n);
  int u, v;
  for (i = 0; i < m; i++) {
    cin >> u >> v;
    u--;
    v--;
    adj[u].insert(v);
    adj[v].insert(u);
  }
  for (i = 0; i < n; i++) ns.insert(i);
  int ans = 0;
  for (i = 0; i < n; i++) {
    if (ns.count(i)) {
      ans++;
      dfs(i);
    }
  }
  cout << ans - 1 << endl;
}
