#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MAX_N = 607;
const ll MOD = 1e9 + 7;

int N, K, match[MAX_N], match_mn[MAX_N][MAX_N], match_mx[MAX_N][MAX_N], match_cnt[MAX_N];
ll fac2[MAX_N], F[MAX_N][MAX_N], ans;

ll ways(int l, int r) {
    if (match_mn[l][r] < l || match_mx[l][r] > r) return 0;
    return fac2[r - l + 1 - (match_cnt[r] - match_cnt[l - 1])];
}

int main() {
    scanf("%d%d", &N, &K);
    for (int i = 1; i <= K; i++) {
        int a, b; scanf("%d%d", &a, &b);
        match[a] = b; match[b] = a;
    }
    for (int i = 1; i <= 2 * N; i++) {
        match_mn[i][i - 1] = 2 * N;
        match_mx[i][i - 1] = 1;
        for (int j = i; j <= 2 * N; j++) {
            if (match[j]) {
                match_mn[i][j] = min(match_mn[i][j - 1], match[j]);
                match_mx[i][j] = max(match_mx[i][j - 1], match[j]);
            } else {
                match_mn[i][j] = match_mn[i][j - 1];
                match_mx[i][j] = match_mx[i][j - 1];
            }
        }
    }
    for (int i = 1; i <= 2 * N; i++) match_cnt[i] = match_cnt[i - 1] + (match[i] ? 1 : 0);
    fac2[0] = 1;
    for (int i = 2; i <= 2 * N; i += 2) fac2[i] = fac2[i - 2] * (i - 1) % MOD;
    for (int len = 2; len <= 2 * N; len++) {
        for (int i = 1; i + len - 1 <= 2 * N; i++) {
            int j = i + len - 1;
            F[i][j] = ways(i, j);
            for (int k = i + 1; k < j; k += 2) {
                (F[i][j] += MOD - F[i][k] * ways(k + 1, j) % MOD) %= MOD;
            }
            (ans += F[i][j] * fac2[2 * N - (j - i + 1) - (2 * K - (match_cnt[j] - match_cnt[i - 1]))]) %= MOD;
        }
    }
    printf("%lld\n", ans);
}
