#include <bits/stdc++.h>
#define mset(a, b) memset(a, b, sizeof(a))
#define mcpy(a, b) memcpy(a, b, sizeof(a))
using namespace std;
typedef long long LL;
const int N = 605;
const int MOD = 1e9 + 7;

template <typename T> inline void read(T &AKNOI) {
	T x = 0, flag = 1;
	char ch = getchar();
	while (!isdigit(ch)) {
		if (ch == '-') flag = -1;
		ch = getchar();
	}
	while (isdigit(ch)) {
		x = x * 10 + ch - '0';
		ch = getchar();
	}
	AKNOI = flag * x;
}

namespace ModCalculator {
	inline void Inc(int &x, int y) {
		x += y; if (x >= MOD) x -= MOD;
	}
	inline void Dec(int &x, int y) {
		x -= y; if (x < 0) x += MOD;
	}
	inline int Add(int x, int y) {
		Inc(x, y); return x;
	}
	inline int Sub(int x, int y) {
		Dec(x, y); return x;
	}
	inline int Mul(int x, int y) {
		return 1LL * x * y % MOD;
	}
}
using namespace ModCalculator;

int n, m, nn, e[N], cnt[N][N];
int g[N], dp[N][N], ans;

void init() {
	read(n); read(m);
	nn = 2 * (n - m);
	n <<= 1;
	for (int i = 1, u, v; i <= m; ++i) {
		read(u); read(v);
		e[u] = v;
		e[v] = u;
	}
	for (int i = 1; i <= n; ++i) {
		for (int j = i; j <= n; ++j) {
			cnt[i][j] = cnt[i][j - 1] + (!e[j]);
		}
	}
	g[0] = 1;
	for (int i = 2; i <= n; i += 2) {
		g[i] = Mul(g[i - 2], i - 1);
	}
}

void solve() {
	for (int i = 1; i <= n; ++i) {
		for (int j = i; j <= n; ++j) {
			int flag = 1;
			for (int k = i; k <= j; ++k) {
				if (e[k] && (e[k] < i || e[k] > j)) {
					flag = 0; break;
				}
			}
			if (!flag) continue;
			dp[i][j] = g[cnt[i][j]];
			for (int k = i + 1; k < j; ++k) {
				Dec(dp[i][j], Mul(dp[i][k], g[cnt[k + 1][j]]));
			}
			Inc(ans, Mul(dp[i][j], g[nn - cnt[i][j]]));
		}
	}
	printf("%d\n", ans);
}

int main() {
	init();
	solve();
	return 0;
}
