#include <bits/stdc++.h>
using namespace std;
inline bool ZXBs_fast_input(int& x) {
  x = 0;
  int c;
  int sign = 1;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') sign = -1;
  x = c ^ '0';
  while ((c = getchar()) >= '0' && c <= '9')
    x = (x << 3) + (x << 1) + (c ^ '0');
  x *= sign;
  return 1;
}
inline bool ZXBs_fast_output(int x) {
  if (x >= 10) ZXBs_fast_output(x / 10);
  putchar(x % 10 + '0');
  return 1;
}
const int rp = 666666;
const bool debug = 1;
const bool I_good_vegetable_a = 1;
double N;
int n, m;
double dp[2020][2020];
int cntr = 0, cntc = 0;
bool usedr[2020], usedc[2020];
double dfs(int i, int j) {
  if (i == n && j == n) return 0.00;
  if (dp[i][j] > 0.00) return dp[i][j];
  dp[i][j] = 0.00;
  double s = N - i * j;
  dp[i][j] += N / s;
  if (i < n) dp[i][j] += (double)(j * (n - i)) / s * dfs(i + 1, j);
  if (j < n) dp[i][j] += (double)(i * (n - j)) / s * dfs(i, j + 1);
  if (i < n && j < n)
    dp[i][j] += (double)((n - i) / s * (n - j)) * dfs(i + 1, j + 1);
  return dp[i][j];
}
signed main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  N = n * n;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    if (!usedr[a]) {
      usedr[a] = 1;
      cntr++;
    }
    if (!usedc[b]) {
      usedc[b] = 1;
      cntc++;
    }
  }
  cout << fixed << setprecision(12) << dfs(cntr, cntc) << endl;
  return 0;
}
