#include <iostream>
#define llint long long
#define mod 1000000007

using namespace std;

llint n, Q;
llint a[3005];
llint dp[3005][3005];
llint inv;

llint modpow(llint a, llint n)
{
	if(n == 0) return 1;
	if(n % 2){
		return ((a%mod) * (modpow(a, n-1)%mod)) % mod;
	}
	else{
		return modpow((a*a)%mod, n/2) % mod;
	}
}

int main(void)
{
	cin >> n >> Q;
	for(int i = 1; i <= n; i++) cin >> a[i];
	inv = modpow(2, mod-2);
	
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			if(a[i] > a[j]) dp[i][j] = 1;
		}
	}
	
	llint l, r;
	for(int q = 0; q < Q; q++){
		cin >> l >> r;
		if(l > r) swap(l, r);
		dp[l][r] = dp[r][l] = (dp[l][r]+dp[r][l])%mod*inv%mod;
		for(int i = 1; i <= n; i++){
			if(i == l || i == r) continue;
			dp[l][i] = dp[r][i] = (dp[l][i]+dp[r][i])%mod*inv%mod;
			dp[i][l] = dp[i][r] = (dp[i][l]+dp[i][r])%mod*inv%mod;
		}
	}
	
	llint ans = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			if(i >= j) continue;
			ans += dp[i][j], ans %= mod;
		}
	}
	ans *= modpow(2, Q), ans %= mod;
	cout << ans << endl;
	
	return 0;
}