#include <cstdio>
#include <algorithm>

#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

typedef long long ll;

const ll M=1000000007;

const int N_MAX=100000;

template<class T>
class Fenwick_tree_dual{
	int n;
	T a[N_MAX];

public:
	void build(int n){
		this->n=n;
		rep(i,n) a[i]=0;
	}

	void add(int i,int j,T v){
		if(i==0){
			for(;j>=0;j=(j&(j+1))-1) a[j]+=v;
			return;
		}
		add(0,j,v);
		add(0,i-1,-v);
	}

	T sum(int i){
		T s=0;
		for(;i<n;i|=i+1) s+=a[i];
		return s;
	}
};

int main(){
	static ll fact[100000];
	fact[0]=1;
	rep(i,99999) fact[i+1]=(i+1)*fact[i]%M;

	for(int n;scanf("%d",&n),n;){
		static int a[100000];
		rep(i,n) a[i]=i;

		int r; scanf("%d",&r);
		rep(i,r){
			int s,t; scanf("%d%d",&s,&t); s--; t--;
			swap(a[s],a[t]);
		}

		static Fenwick_tree_dual<int> F;
		F.build(n);

		ll ans=0;
		rep(i,n){
			ans=(ans+(a[i]-F.sum(a[i]))*fact[n-i-1])%M;
			F.add(a[i]+1,n-1,1);
		}
		printf("%lld\n",ans);
	}

	return 0;
}