#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define REP(i,n) for(int i=(0);i<(n);i++)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef long long ll;

template<class T> inline void read(T &x){
	int f=0;x=0;char ch=getchar();
	for(;!isdigit(ch);ch=getchar())f|=(ch=='-');
	for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';
	if(f)x=-x;
}

const int N=605,mod=1e9+7;
int f[N][N],g[N][N],c[N][N],mn[N][N],mx[N][N],h[N],L[N],R[N];
int n,m,a,b,ans;

int main(){
	read(n),read(m),n*=2;
	h[0]=1;
	rep(i,1,n)h[i]=(ll)h[i-1]*(2*i-1)%mod;
	memset(mn,0x3f,sizeof mn);
	rep(i,1,m){
		read(a),read(b);
		if(a>b)swap(a,b);
		R[a]=b,L[b]=a;
		mx[a][a]=b,mn[b][b]=a;
	}
	rep(i,1,n+1){
		if(!L[i]&&!R[i])c[i][i]=1;
		g[i][i-1]=1;
	}
	per(l,n,1)rep(r,l+1,n){
		c[l][r]=c[l][r-1]+c[r][r];
		mn[l][r]=min(mn[l][r-1],mn[r][r]);
		mx[l][r]=max(mx[l][r-1],mx[r][r]);
		if((r-l+1)%2||mn[l][r]<l||mx[l][r]>r)continue;
		f[l][r]=g[l][r]=h[c[l][r]/2];
		rep(k,l+1,r-1)
			f[l][r]=(f[l][r]+mod-(ll)f[l][k]*g[k+1][r]%mod)%mod;
		ans=(ans+(ll)f[l][r]*h[(n-2*m-c[l][r])/2])%mod;
	}
	cout<<ans<<endl;
	return 0;
}