#include <bits/stdc++.h>
using namespace std;
const int N = 4e5;
int n, q;
int a[N];
const int mod = (int)1e9 + 7;
int f[3002][3002][3];
void add(int &x, int y) {
    x += y;
    if (x >= mod) {
        x -= mod;
    }
}
int s1[N][3];
int s2[N][3];
int main() {
    ios_base::sync_with_stdio(false);
    cin >> n >> q;
    vector<vector<int> > all;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++) {
        for (int j = i + 1; j <= n; j++) {
            if (a[i] < a[j]) {
                f[i][j][0] = 1;
            } else if (a[i] > a[j]) {
                f[i][j][1] = 1;
            } else {
                f[i][j][2] = 1;
            }
        }
    }
    int d2 = (mod + 1) / 2;
    int mulp = 1;
    for (int qr = 1; qr <= q; qr++) {
        int x, y;
        cin >> x >> y;
        if (x > y) {
            swap(x, y);
        }
        int q1 = f[x][y][0];
        int q2 = f[x][y][1];
        add(f[x][y][0], q2);
        add(f[x][y][1], q1);
        f[x][y][0] = 1ll * d2 * f[x][y][0] % mod;
        f[x][y][1] = 1ll * d2 * f[x][y][1] % mod;
        for (int j = 1; j <= n; j++) {
            if (j < x) {
                s1[j][0] = f[j][x][0] % mod;
                s1[j][1] = f[j][x][1] % mod;
                s2[j][2] = f[j][x][2] % mod;
            } else {
                s1[j][0] = f[x][j][0] % mod;
                s1[j][1] = f[x][j][1] % mod;
                s1[j][2] = f[x][j][2] % mod;
            }
            if (j < y) {
                s2[j][0] = f[j][y][0] % mod;
                s2[j][1] = f[j][y][1] % mod;
                s2[j][2] = f[j][y][2] % mod;
            } else {
                s2[j][0] = f[y][j][0] % mod;
                s2[j][1] = f[y][j][1] % mod;
                s2[j][2] = f[y][j][2] % mod;
            }
        }
        for (int j = 1; j <= n; j++) {
            if (j != x && j != y) {
               if (j < x) {
                   add(f[j][y][0], s1[j][0]);
                   add(f[j][y][1], s1[j][1]);
                   add(f[j][y][2], s1[j][2]);

                   add(f[j][x][0], s2[j][0]);
                   add(f[j][x][1], s2[j][1]);
                   add(f[j][x][2], s2[j][2]);
               } else if (j > x && j < y) {
                   add(f[j][y][0], s1[j][1]);
                   add(f[j][y][1], s1[j][0]);
                   add(f[j][y][2], s1[j][2]);

                   add(f[x][j][0], s2[j][1]);
                   add(f[x][j][1], s2[j][0]);
                   add(f[x][j][2], s2[j][2]);
               } else {
                   add(f[y][j][0], s1[j][0]);
                   add(f[y][j][1], s1[j][1]);
                   add(f[y][j][2], s1[j][2]);

                   add(f[x][j][0], s2[j][0]);
                   add(f[x][j][1], s2[j][1]);
                   add(f[x][j][2], s2[j][2]);
               }
               if (j < x) {
                   for (int t = 0; t < 3; t++) {
                       f[j][x][t] = 1ll * f[j][x][t] * d2 % mod;
                       f[j][y][t] = 1ll * f[j][y][t] * d2 % mod;
                   }
               } else if (j > x && j < y) {
                   for (int t = 0; t < 3; t++) {
                       f[x][j][t] = 1ll * f[x][j][t] * d2 % mod;
                       f[j][y][t] = 1ll * f[j][y][t] * d2 % mod;
                   }
               } else {
                   for (int t = 0; t < 3; t++) {
                       f[x][j][t] = 1ll * f[x][j][t] * d2 % mod;
                       f[y][j][t] = 1ll * f[y][j][t] * d2 % mod;
                   }
               }
            }
        }
        add(mulp, mulp);

    }
    int ans = 0;
    for (int it = 1; it <= n; it++) {
        for (int j = it + 1; j <= n; j++) {
            int qq = 1ll * f[it][j][1] * mulp % mod;
            add(ans, qq);
        }
    }
    cout << ans << "\n";

    return 0;
}

Measured memory_bytes: 108928