#include<bits/stdc++.h>
using namespace std;
#define maxn 620
#define rep(i,l,r) for(register int i = l ; i <= r ; i++)
#define repd(i,r,l) for(register int i = r ; i >= l ; i--)
#define rvc(i,S) for(register int i = 0 ; i < (int)S.size() ; i++)
#define rvcd(i,S) for(register int i = ((int)S.size()) - 1 ; i >= 0 ; i--)
#define fore(i,x)for (register int i = head[x] ; i ; i = e[i].next)
#define pb push_back
#define prev prev_
#define stack stack_
#define mp make_pair
#define fi first
#define se second
#define inf 0x3f3f3f3f
typedef long long ll;
typedef pair<int,int> pr;

const ll mod = 1e9 + 7;
ll f[maxn][maxn],g[maxn * 2];
int tag[maxn],n,k,cnt[maxn][maxn];

int main(){
	scanf("%d %d",&n,&k);
	rep(i,1,n * 2) tag[i] = -1;
	rep(i,1,k){
		int x,y;
	   	scanf("%d %d",&x,&y);
		tag[x] = y;
		tag[y] = x;
	}
	n *= 2 , k *= 2;
	g[0] = 1;
	rep(i,2,n) if ( !(i & 1) ) g[i] = g[i - 2] * (i - 1) % mod;
	ll ans = 0;
	rep(i,1,n){
		rep(j,i,n){
			cnt[i][j] = cnt[i][j - 1] + (tag[j] == -1);
		}
	}
	rep(i,1,n){
		int mn = n + 1 , mx = 0;
		if ( ~tag[i] ) mn = mx = tag[i];
		rep(j,i + 1,n){
			if ( ~tag[j] ) mn = min(mn,tag[j]) , mx = max(mx,tag[j]);
			if ( mn < i ) break;
			if ( mx > j || (cnt[i][j] & 1) ) continue;
			f[i][j] = g[cnt[i][j]];
			rep(k,i + 1,j - 1) f[i][j] = (f[i][j] - f[i][k] * g[cnt[i][j] - cnt[i][k]] % mod + mod) % mod;
			ans = (ans + f[i][j] * g[n - k - cnt[i][j]]) % mod;
		}
	}
	printf("%lld\n",ans);
}
