#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const ll MOD = 1000000007;
const int maxn = 608;

int a[maxn], b[maxn], c[maxn], n, k;
ll p[maxn], f[maxn][maxn];

bool in(int a, int l, int r) {
	return l <= a && a < r;
}

bool chk(int l, int r) {
	for (int i = 0; i < k; i++) {
		if (in(a[i], l, r) && !in(b[i], l, r)) return true;
		if (!in(a[i], l, r) && in(b[i], l, r)) return true;
	}
	return false;
}

int main() {
	//freopen("1.txt","r",stdin) ;
	scanf("%d%d",&n,&k);

	p[0] = 1;
	for (int i = 0; i < n-k; i++) {
 		p[i+1] = p[i] * (i<<1|1) %MOD; 
	}

	
	n <<= 1;
	for (int i = 0; i < k; i++) {
		scanf("%d%d",a+i,b+i);
		c[a[i]--] = c[b[i]--] = 1;
	}
	for (int i = 1; i <= n; i++) {
		c[i] = (!c[i]) + c[i-1];
	}

	
	ll ans = 0;
	for (int l = 0; l < n; l++)
		for (int r = l+1; r <=n;r++) {
			int x = c[r] - c[l];
			if ((x%2!=0) || chk(l, r)) continue;
			ll s = p[x>>1];
			for (int i = l+1; i<r;i++)
				s = (s - f[l][i] * p[(c[r]-c[i])>>1]) %MOD;
			f[l][r] = s;
			ans = (ans + s * p[((n-x-2*k)>>1)]) %MOD;
		}
	if (ans < 0) ans += MOD;
	printf("%lld\n",ans);
	return 0;
}
