#include <vector>
#include <iostream>
#include <algorithm>
#pragma warning(disable : 4996)
#define mod 1000000007
using namespace std;
int N, Q, s, t, z[100001], fact[100001]; vector<int> seg[262144];
int query(int a, int b, int x1, int x2, int k, int l, int r) {
	if (r <= a || b <= l) return 0;
	if (a <= l && r <= b) return lower_bound(seg[k].begin(), seg[k].end(), x2) - lower_bound(seg[k].begin(), seg[k].end(), x1);
	int lc = query(a, b, x1, x2, 2 * k, l, (l + r) / 2);
	int rc = query(a, b, x1, x2, 2 * k + 1, (l + r) / 2, r);
	return lc + rc;
}
int main() {
	fact[0] = 1;
	for (int i = 1; i < 100000; i++) fact[i] = 1LL * fact[i - 1] * i % mod;
	while (cin >> N >> Q) {
		for (int i = 0; i < N; i++) z[i] = i;
		for (int i = 0; i < Q; i++) {
			scanf("%d%d", &s, &t);
			swap(z[s - 1], z[t - 1]);
		}
		for (int i = 0; i < 262144; i++) seg[i].clear();
		for (int i = 0; i < N; i++) {
			int u = i + 131072;
			while (u > 0) {
				seg[u].push_back(z[i]);
				u >>= 1;
			}
		}
		for (int i = 0; i < 131072; i++) sort(seg[i].begin(), seg[i].end());
		int ret = 0;
		for (int i = N - 1; i >= 0; i--) ret = (ret + 1LL * query(i + 1, N, 0, z[i], 1, 0, 131072) * fact[N - i - 1]) % mod;
		printf("%d\n", ret);
	}
}