#include <bits/stdc++.h>

using namespace std;

const int md = 1e9 + 7;

int add(int x, int y) {
  x += y;
  if (x >= md) {
    x -= md;
  }
  return x;
}

int sub(int x, int y) {
  x -= y;
  if (x < 0) {
    x += md;
  }
  return x;
}

int mul(int x, int y) {
  return (long long)x * y % md;
}

int main() {
#ifdef wxh010910
  freopen("input.txt", "r", stdin);
#endif
  int n, m;
  cin >> n >> m;
  vector<int> a(m), b(m);
  for (int i = 0; i < m; ++i) {
    cin >> a[i] >> b[i];
    --a[i];
    --b[i];
  }
  vector<int> ways(n + 1);
  ways[0] = 1;
  for (int i = 1; i <= n; ++i) {
    ways[i] = mul(ways[i - 1], (i << 1) - 1);
  }
  vector<vector<int>> f(n << 1, vector<int> (n << 1));
  vector<vector<int>> g(n << 1, vector<int> (n << 1));
  int answer = 0;
  for (int l = (n << 1) - 1; ~l; --l) {
    for (int r = l + 1; r < n << 1; r += 2) {
      bool flag = true;
      int inside = 0;
      for (int i = 0; i < m; ++i) {
        int type = (a[i] >= l && a[i] <= r) + (b[i] >= l && b[i] <= r);
        if (type == 1) {
          flag = false;
          break;
        }
        if (type) {
          ++inside;
        }
      }
      if (flag) {
        inside = (r - l + 1 >> 1) - inside;
        int outside = n - m - inside;
        f[l][r] = g[l][r] = ways[inside];
        for (int i = l + 1; i < r - 1; i += 2) {
          f[l][r] = sub(f[l][r], mul(f[l][i], g[i + 1][r]));
        }
        answer = add(answer, mul(f[l][r], ways[outside]));
      }
    }
  }
  cout << answer << endl;
  return 0;
}
