#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <unordered_map>

using namespace std;

typedef long long ll;

const int MAXN = 605;
const ll MOD = 1000000007;

int n,m;
int match[MAXN];

ll ans;
ll fac[MAXN];
ll f[MAXN][MAXN];

int main()
{
	scanf("%d%d",&n,&m);
	n <<= 1;
	for (int u,v,i = 1;i <= m;i++)
	{
		scanf("%d%d",&u,&v);
		match[u] = v;
		match[v] = u;
	}
	fac[0] = 1;
	for (int i = 2;i <= n;i += 2)
		fac[i] = fac[i - 2] * (i - 1) % MOD;
	for (int len = 2;len <= n;len += 2)
		for (int i = 1,j = len;j <= n;i++,j++)
		{
			bool ok = 1;
			for (int k = i;k <= j;k++)
				if (match[k] && (match[k] < i || match[k] > j))
				{
					ok = 0;
					break;
				}
			if (!ok)
				continue;
			int cnt = 0;
			for (int k = i;k <= j;k++)
			{
				cnt += !match[k];
				if (~cnt & 1)
					(f[i][j] -= fac[cnt] * f[k + 1][j]) %= MOD;
			}
			(f[i][j] += fac[cnt]) %= MOD;
			(ans += f[i][j] * fac[n - 2 * m - cnt]) %= MOD;
		}
	printf("%lld\n",(ans + MOD) % MOD);
	return 0;
}