#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<int,P> P1;
typedef pair<P,P> P2;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 1000000000
#define mod 1000000007
#define fi first
#define sc second
#define rep(i,x) for(int i=0;i<x;i++)
#define repn(i,x) for(int i=1;i<=x;i++)
#define SORT(x) sort(x.begin(),x.end())
#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
ll dp[605][605];
int n,k;
int to[605];
bool ok[605][605];
int cnt[605][605];
ll v[605];
ll rec(int l,int r){
	if(!ok[l][r]) return dp[l][r] = 0;
	if(dp[l][r] >= 0) return dp[l][r];
	dp[l][r] = v[cnt[l][r]];
	for(int x=l+1;x<=r;x++){
		if(!ok[x][r]) continue;
		dp[l][r] -= rec(l,x-1)*v[cnt[x][r]]%mod;
	}
	return dp[l][r] = (dp[l][r]%mod+mod)%mod;
}
int main(){
	cin>>n>>k;
	rep(i,k){
		int a,b; cin>>a>>b;
		to[a] = b; to[b] = a;
	}
	for(int i=1;i<=2*n;i++) for(int j=i;j<=2*n;j++){
		for(int x=i;x<=j;x++){
			if(to[x] && !(i<=to[x] && to[x]<=j)) goto fail;
			if(!to[x]) cnt[i][j]++;
		}
		if(cnt[i][j]%2 == 0) ok[i][j] = 1;
		fail:;
	}
	for(int i=600;i>=0;i-=2){
		v[i] = 1;
		for(int j=i-1;j>=0;j-=2){
			v[i] = v[i]*1LL*j%mod;
		}
	}
	memset(dp,-1,sizeof(dp));
	ll ans = 0;
	for(int i=1;i<=2*n;i++) for(int j=i;j<=2*n;j++){
		ans += rec(i,j) * v[cnt[1][2*n]-cnt[i][j]] % mod;
		ans %= mod;
	}
	cout << ans << endl;
}