#include <bits/stdc++.h>
#define rep(i, x, y) for (int i = x; i <= y; i++)
#define int long long
using namespace std;

const int N = 605, mod = 1e9 + 7;
int n, K, f[N][N], g[N], to[N], pre[N], ans;

int C2(int x) {
    return 1ll * x * (x - 1) / 2 % mod;
}

int num(int l, int r) {
    return pre[r] - pre[l - 1];
}

int solve(int l, int r) {
    rep(i, l, r)
        if (to[i] && (to[i] < l || to[i] > r)) return 0;
    f[l][r] = g[num(l, r) >> 1];
    rep(k, l + 1, r - 1) {
        f[l][r] = (f[l][r] - f[l][k] * g[num(k + 1, r) >> 1] % mod + mod) % mod;
    } return f[l][r];
}

signed main() {
    cin >> n >> K;
    rep(i, 1, K) {
        int x, y; scanf("%lld%lld", &x, &y);
        to[x] = y, to[y] = x;
    }
    rep(i, 1, n << 1) pre[i] = pre[i - 1] + (!to[i]);
    g[0] = 1;
    rep(i, 1, n) g[i] = g[i - 1] * (2 * i - 1) % mod;  // g[i] = g[i - 1] * C(2 * i, 2) / i，除掉旋转同构的
    rep(l, 1, n << 1)
        rep(r, l + 1, n << 1)
            if (num(l, r) % 2 == 0 && (r - l + 1) % 2 == 0)
                (ans += solve(l, r) * g[(num(1, l - 1) + num(r + 1, 2 * n)) >> 1] % mod) %= mod;
    printf("%lld\n", ans);
    return 0;
}