#include <bits/stdc++.h>
using namespace std;
const char untl = '\n';
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  for (; !(ch >= '0' && ch <= '9'); ch = getchar())
    if (ch == '-') f *= -1;
  for (; (ch >= '0' && ch <= '9'); ch = getchar())
    x = (x << 3) + (x << 1) + (ch ^ 48);
  return x * f;
}
inline bool read(long long &x) {
  x = 0;
  long long f = 1;
  char ch = getchar();
  for (; !(ch >= '0' && ch <= '9'); ch = getchar())
    if (ch == '-') f *= -1;
  for (; (ch >= '0' && ch <= '9'); ch = getchar())
    x = (x << 3) + (x << 1) + (ch ^ 48);
  x *= f;
  if (ch == '\r') ch = getchar();
  return ch != untl && ch != EOF;
}
inline char getDg() {
  char ch = getchar();
  for (; !(ch >= '0' && ch <= '9');) ch = getchar();
  return ch;
}
inline char getLw() {
  char ch = getchar();
  for (; !(ch >= 'a' && ch <= 'z');) ch = getchar();
  return ch;
}
inline char getUp() {
  char ch = getchar();
  for (; !(ch >= 'A' && ch <= 'Z');) ch = getchar();
  return ch;
}
inline char getLtr() {
  char ch = getchar();
  for (; !((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'));)
    ch = getchar();
  return ch;
}
inline char gc() {
  char ch = getchar();
  for (; ch == '\n' || ch == '\r' || ch == ' ';) ch = getchar();
  return ch;
}
inline void write(long long x) {
  if (x < 0) {
    putchar('-');
    write(-x);
    return;
  }
  if (x > 9) write(x / 10);
  putchar((x % 10) ^ 48);
  return;
}
inline void write(char const *a) {
  for (long long i = 0; a[i]; ++i) putchar(a[i]);
  return;
}
inline void clr() {
  putchar(10);
  return;
}
inline void spc() {
  putchar(32);
  return;
}
inline void writeln(long long x) {
  write(x);
  clr();
  return;
}
inline void writeln(char const *a) {
  write(a);
  clr();
  return;
}
inline void writesc(long long x) {
  write(x);
  spc();
  return;
}
inline void writesc(char const *a) {
  write(a);
  spc();
  return;
}
inline void AC();
int main(int argc, char *argv[]) {
  AC();
  return 0;
}
const long long maxn = 1E3 + 8;
double dp[maxn][maxn], s;
long long n, m, a[maxn], x, y;
inline void AC() {
  n = read();
  m = read();
  for (long long i = 1; i <= n; ++i) a[i] = read();
  for (long long i = 1; i <= n; ++i)
    for (long long j = 1; j <= n; ++j) dp[i][j] = a[i] > a[j];
  for (; m--;) {
    x = read();
    y = read();
    for (long long i = 1; i <= n; ++i) {
      dp[x][i] = dp[y][i] = 0.5 * (dp[x][i] + dp[y][i]);
      dp[i][x] = dp[i][y] = 0.5 * (dp[i][x] + dp[i][y]);
    }
    dp[x][y] = dp[y][x] = 0.5;
  }
  for (long long i = 1; i <= n; ++i)
    for (long long j = i + 1; j <= n; ++j) s += dp[i][j];
  printf("%.10lf\n", s);
  return;
}
