#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
void azmuth(long long n = 12) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(n) << fixed;
}
long long lb = 1000000000;
void solve() {
  long long n, m;
  cin >> n >> m;
  vector<long long> v(n + 5);
  for (long long i = 0; i < n; i++) cin >> v[1 + i];
  ;
  long long dp[n + 5];
  for (long long i = 1; i <= n; i++) dp[v[i]] = i;
  map<long long, set<long long>> mp;
  for (long long i = 0, a, b; i < m; i++) {
    cin >> a >> b;
    mp[a].insert(dp[b]);
    mp[b].insert(dp[a]);
  }
  set<long long> s;
  long long i = 1, j = 1;
  long long ans = 0;
  while (i <= n && j <= n) {
    if (i == j) {
      s.insert(i);
      j++;
      continue;
    }
    if (mp.count(v[j])) {
      bool f = false;
      while (i < j) {
        auto itr = mp[v[j]].upper_bound(i - 1);
        if (*itr >= i && *itr < j) {
          long long sz = s.size();
          ans += sz;
          f = true;
          s.erase(i);
          i++;
        } else
          break;
      }
    }
    s.insert(j);
    j++;
  }
  long long sz = s.size();
  ans += sz * (sz + 1) / 2;
  cout << ans;
}
int32_t main() {
  azmuth();
  long long t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
