#include<bits/stdc++.h>
#define mod 1000000007
typedef long long ll;
ll gi(){
	ll x=0,f=1;
	char ch=getchar();
	while(!isdigit(ch))f^=ch=='-',ch=getchar();
	while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
	return f?x:-x;
}
int f[610],s[610],R[610],lnk[610],F[610][610];
int main(){
#ifdef XZZSB
	freopen("in.in","r",stdin);
	freopen("out.out","w",stdout);
#endif
	int n=gi()*2,k=gi(),A,B;
	for(int i=1;i<=n;++i)s[i]=1;
	while(k--){
		A=gi(),B=gi();if(A>B)std::swap(A,B);
		s[A]=s[B]=0;R[A]=B;lnk[A]=B,lnk[B]=A;
	}
	for(int i=1;i<=n;++i)s[i]+=s[i-1];
	int ans=0;
	f[0]=1;for(int i=2;i<=n;i+=2)f[i]=1ll*f[i-2]*(i-1)%mod;
	for(int sz=2;sz<=n;++sz){
		for(int l=1,r=sz;r<=n;++l,++r){
			if(R[l]&&R[l]>r)continue;
			bool flg=0;
			for(int i=l;i<=r;++i)if(lnk[i]&&(lnk[i]<l||lnk[i]>r)){flg=1;break;}
			if(flg)continue;
			F[l][r]=f[s[r]-s[l-1]];
			for(int i=R[l];i<r;++i)F[l][r]=(F[l][r]-1ll*F[l][i]*f[s[r]-s[i]]%mod+mod)%mod;
			ans=(ans+1ll*F[l][r]*f[s[n]-s[r]+s[l-1]])%mod;
		}
	}
	printf("%d\n",ans);
	return 0;
}
