#include <bits/stdc++.h>
using namespace std;
const int N = 2 * 1e3 + 90, M = 2 * 1e4 + 90;
int vis[M], vis1[M], x, y, n, m;
double dp[N][N];
double Dp(int row, int col) {
  if (row < 0 || col < 0) return 0.0;
  if (row == 0 && col == 0) return 0.0;
  double &ret = dp[row][col];
  if (ret == ret) return ret;
  ret = 0.0;
  double pRow = 1.0 * row * (n - col) / (n * n);
  double pCol = 1.0 * col * (n - row) / (n * n);
  double pBoth = 1.0 * row * col / (n * n);
  double pRest = 1.0 * (n - row) * (n - col) / (n * n);
  double bla =
      1 - (n * n + (row * col) - (n * col) - (n * row)) / (1.0 * n * n);
  ret += 1 + (pRow * Dp(row - 1, col) + pCol * Dp(row, col - 1) +
              pBoth * Dp(row - 1, col - 1));
  ret *= (1.0 / bla);
  return ret;
}
int main() {
  cin >> n >> m;
  int row = 0, col = 0;
  for (int i = 0; i < m; i++) {
    cin >> x >> y;
    if (!vis[x]) row++;
    if (!vis1[y]) col++;
    vis[x] = vis1[y] = 1;
  }
  memset(dp, -1, sizeof dp);
  printf("%.9f\n", Dp(n - row, n - col));
  return 0;
}
