#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define MK 300005
#define MN 100005
#define Mod 1000000007
typedef pair<int,int> P;
typedef long long ll;
int K, N, cnt, sum, x, y, now;
int p[MK], f[MK], d1[MK], d2[MK], A[MN], B[MN], res[MN];
vector <int> tn[MK];
vector <P> tf[MK];
int main() {
int i, j;
scanf("%d%d", &K, &N);
for (i = 0; i < K; i++) scanf("%d", &p[i]);
f[0] = now = 1;
for (i = 1; i < K; i++) f[i] = (ll)f[i-1]*i%Mod;
for (i = 0; i < N; i++) {
scanf("%d%d", &A[i], &B[i]); A[i]--; B[i]--;
tn[A[i]].push_back(i); tn[B[i]].push_back(i);
tf[A[i]].push_back(P(i, p[B[i]])); tf[B[i]].push_back(P(i, p[A[i]]));
}
for (i = 0; i < K; i++) {
cnt = p[i]-1, sum = 0;
for (x = p[i]; x > 0; x -= x&-x) cnt -= d1[x];
for (x = K-p[i]+1; x > 0; x -= x&-x) sum = (sum+d2[x])%Mod;
now = (now+(ll)cnt*f[K-i-1])%Mod;
for (vector<int>::iterator it = tn[i].begin(); it != tn[i].end(); ++it) {
j = *it;
res[j] = (res[j]-(ll)cnt*f[K-i-1])%Mod;
res[j] = (res[j]-sum)%Mod;
}
for (vector<P>::iterator it = tf[i].begin(); it != tf[i].end(); ++it) {
j = it->first; y = it->second;
cnt = y-1; sum = 0;
for (x = y; x > 0; x -= x&-x) cnt -= d1[x];
for (x = K-y+1; x > 0; x -= x&-x) sum = (sum+d2[x])%Mod;
res[j] = (res[j]+(ll)cnt*f[K-i-1])%Mod;
res[j] = (res[j]+sum)%Mod;
}
for (x = p[i]; x <= K; x += x&-x) d1[x] += 1;
for (x = K-p[i]+1; x <= K; x += x&-x) d2[x] = (d2[x]+f[K-i-1])%Mod;
}
for (i = 0; i < N; i++) {
res[i] = (res[i]+now)%Mod;
if (p[A[i]] < p[B[i]]) {
res[i] = (res[i]-f[K-A[i]-1])%Mod;
res[i] = (res[i]+f[K-B[i]-1])%Mod;
}
if (res[i] < 0) res[i] += Mod;
printf("%d\n", res[i]);
}
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBNSyAzMDAwMDUKI2RlZmluZSBNTiAxMDAwMDUKI2RlZmluZSBNb2QgMTAwMDAwMDAwNwp0eXBlZGVmIHBhaXI8aW50LGludD4gUDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmludCBLLCBOLCBjbnQsIHN1bSwgeCwgeSwgbm93OwppbnQgcFtNS10sIGZbTUtdLCBkMVtNS10sIGQyW01LXSwgQVtNTl0sIEJbTU5dLCByZXNbTU5dOwp2ZWN0b3IgPGludD4gdG5bTUtdOwp2ZWN0b3IgPFA+IHRmW01LXTsKaW50IG1haW4oKSB7CglpbnQgaSwgajsKCXNjYW5mKCIlZCVkIiwgJkssICZOKTsKCWZvciAoaSA9IDA7IGkgPCBLOyBpKyspIHNjYW5mKCIlZCIsICZwW2ldKTsKCWZbMF0gPSBub3cgPSAxOwoJZm9yIChpID0gMTsgaSA8IEs7IGkrKykgZltpXSA9IChsbClmW2ktMV0qaSVNb2Q7Cglmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CgkJc2NhbmYoIiVkJWQiLCAmQVtpXSwgJkJbaV0pOyBBW2ldLS07IEJbaV0tLTsKCQl0bltBW2ldXS5wdXNoX2JhY2soaSk7IHRuW0JbaV1dLnB1c2hfYmFjayhpKTsKCQl0ZltBW2ldXS5wdXNoX2JhY2soUChpLCBwW0JbaV1dKSk7IHRmW0JbaV1dLnB1c2hfYmFjayhQKGksIHBbQVtpXV0pKTsKCX0KCWZvciAoaSA9IDA7IGkgPCBLOyBpKyspIHsKCQljbnQgPSBwW2ldLTEsIHN1bSA9IDA7CgkJZm9yICh4ID0gcFtpXTsgeCA+IDA7IHggLT0geCYteCkgY250IC09IGQxW3hdOwoJCWZvciAoeCA9IEstcFtpXSsxOyB4ID4gMDsgeCAtPSB4Ji14KSBzdW0gPSAoc3VtK2QyW3hdKSVNb2Q7CgkJbm93ID0gKG5vdysobGwpY250KmZbSy1pLTFdKSVNb2Q7CgkJZm9yICh2ZWN0b3I8aW50Pjo6aXRlcmF0b3IgaXQgPSB0bltpXS5iZWdpbigpOyBpdCAhPSB0bltpXS5lbmQoKTsgKytpdCkgewoJCQlqID0gKml0OwoJCQlyZXNbal0gPSAocmVzW2pdLShsbCljbnQqZltLLWktMV0pJU1vZDsKCQkJcmVzW2pdID0gKHJlc1tqXS1zdW0pJU1vZDsKCQl9CgkJZm9yICh2ZWN0b3I8UD46Oml0ZXJhdG9yIGl0ID0gdGZbaV0uYmVnaW4oKTsgaXQgIT0gdGZbaV0uZW5kKCk7ICsraXQpIHsKCQkJaiA9IGl0LT5maXJzdDsgeSA9IGl0LT5zZWNvbmQ7CgkJCWNudCA9IHktMTsgc3VtID0gMDsKCQkJZm9yICh4ID0geTsgeCA+IDA7IHggLT0geCYteCkgY250IC09IGQxW3hdOwoJCQlmb3IgKHggPSBLLXkrMTsgeCA+IDA7IHggLT0geCYteCkgc3VtID0gKHN1bStkMlt4XSklTW9kOyAKCQkJcmVzW2pdID0gKHJlc1tqXSsobGwpY250KmZbSy1pLTFdKSVNb2Q7CgkJCXJlc1tqXSA9IChyZXNbal0rc3VtKSVNb2Q7CgkJfQoJCWZvciAoeCA9IHBbaV07IHggPD0gSzsgeCArPSB4Ji14KSBkMVt4XSArPSAxOwoJCWZvciAoeCA9IEstcFtpXSsxOyB4IDw9IEs7IHggKz0geCYteCkgZDJbeF0gPSAoZDJbeF0rZltLLWktMV0pJU1vZDsKCX0KCWZvciAoaSA9IDA7IGkgPCBOOyBpKyspIHsKCQlyZXNbaV0gPSAocmVzW2ldK25vdyklTW9kOwoJCWlmIChwW0FbaV1dIDwgcFtCW2ldXSkgewoJCQlyZXNbaV0gPSAocmVzW2ldLWZbSy1BW2ldLTFdKSVNb2Q7CgkJCXJlc1tpXSA9IChyZXNbaV0rZltLLUJbaV0tMV0pJU1vZDsKCQl9CgkJaWYgKHJlc1tpXSA8IDApIHJlc1tpXSArPSBNb2Q7CgkJcHJpbnRmKCIlZFxuIiwgcmVzW2ldKTsKCX0KCXJldHVybiAwOwp9