#include<bits/stdc++.h>
#define fi first
#define se second
#ifdef CX_TEST
#define Debug printf
#else
#define Debug(...)
#endif
#define LL long long
using namespace std;
typedef pair<int, int> P;
const int maxn = 605;
const int mod = 1e9 + 7;

void add(int &x, int y) {
    x += y;
    if(x >= mod) x -= mod;
}

int mul(int x, int y) {
    LL z = 1LL * x * y;
    return z - z / mod * mod;
}

int g[maxn], f[maxn][maxn], d[maxn][maxn], c[maxn];

int main() {
#ifdef CX_TEST
    freopen("E:\\program--GG\\test_in.txt", "r", stdin);
#endif
    int n, m, i, j, k, l, w = 0;
    scanf("%d%d", &n, &m);
    n *= 2;
    for(i = 0; i < m; i++) {
        scanf("%d%d", &j, &k);
        c[j] = k;
        c[k] = j;
    }
    m = n - m * 2;
    g[0] = 1;
    for(i = 2; i <= n; i += 2) g[i] = mul(g[i - 2], i - 1);
    for(i = 1; i <= n; i++) {
        for(j = i; j <= n; j++) d[i][j] = d[i][j - 1] + (c[j] == 0);
    }
    for(l = 2; l <= n; l++) {
        for(i = 1; i <= n; i++) {
            j = i + l - 1;
            if(j > n) break;
            for(k = i; k <= j; k++) {
                if(c[k] && c[k] < i || c[k] > j) break;
            }
            if(k <= j || (d[i][j] & 1)) continue;
            f[i][j] = g[d[i][j]];
            for(k = i + 1; k < j; k++) add(f[i][j], mod - mul(f[i][k], g[d[k + 1][j]]));
            add(w, mul(f[i][j], g[m - d[i][j]]));
        }
    }
    cout << w << endl;
    return 0;
}
