#include<bits/stdc++.h>
#define cmin(a,b) (a>(b)?a=(b),1:0)
#define cmax(a,b) (a<(b)?a=(b),1:0)
#define dmin(a,b) ((a)<(b)?(a):(b))
#define dmax(a,b) ((a)>(b)?(a):(b))
namespace io
{
	int F()
	{
		 int F=1,n=0;
		 char ch;
		 while((ch=getchar())!='-'&&(ch<'0'||ch>'9'));
		 ch=='-'?F=0:n=ch-'0';
		 while((ch=getchar())>='0'&&ch<='9')n=n*10+ch-'0';
		 return F?n:-n;
	}
	long long G()
	{
		 long long F=1,n=0;
		 char ch;
		 while((ch=getchar())!='-'&&(ch<'0'||ch>'9'));
		 ch=='-'?F=0:n=ch-'0';
		 while((ch=getchar())>='0'&&ch<='9')n=n*10+ch-'0';
		 return F?n:-n;
	}
}
int R(int l,int r)
{
	return (rand()<<15|rand())%(r-l+1)+l;
}
int a[333],b[333];
int f[666][666];
int vis[666];
int g[666];
int sum[666];
const int M=1000000007;
int main()
{
	int n=io::F(),k=io::F();
	for(register int i=1;i<=k;++i)a[i]=io::F(),b[i]=io::F(),vis[a[i]]=vis[b[i]]=1;
	g[0]=1;
	for(register int i=2;i<=n+n;i+=2)
		g[i]=1ll*g[i-2]*(i-1)%M;
	int cnt=0;
	for(register int i=1;i<=n+n;++i)
		cnt+=!vis[i];
	for(register int i=1;i<=n+n;++i)
		sum[i]=sum[i-1]+!vis[i];
	int ans=0;
	for(register int l=2;l<=n+n;l+=2)
		for(register int i=1;i+l<=n+n+1;++i)
		{
			int fl=0;
			for(register int j=1;j<=k;++j)
				if((i<=a[j]&&a[j]<i+l)^(i<=b[j]&&b[j]<i+l))
					{fl=1;break;}
			if(fl)continue;
			int c2=0;
			for(register int j=i;j<i+l;++j)c2+=!vis[j];
			f[i][i+l-1]=g[c2];
			for(register int j=i+1;j<i+l-1;j+=2)
				f[i][i+l-1]=(f[i][i+l-1]+1ll*(M-f[i][j])*g[sum[i+l-1]-sum[j]])%M;
			ans=(ans+1ll*f[i][i+l-1]*g[cnt-c2])%M;
		}
	printf("%d\n",ans);
	return 0;
}
