#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int n, m;
const int maxn = 3e5 + 10;
int idx[maxn];
vector<int> f[maxn];
int vis[maxn];
int a[maxn];
struct cmp {
  bool operator()(const int &l, const int &r) { return l > r; }
};
set<int, cmp> st;
int main() {
  scanf("%d%d", &n, &m);
  int start;
  for (int i = (1); i < (n + 1); i++) {
    int x;
    scanf("%d", &x);
    idx[x] = i;
    a[i] = x;
  }
  for (int i = (0); i < (m); i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    f[y].push_back(x);
  }
  for (auto &i : f[a[n]]) st.insert(idx[i]);
  vis[*st.begin()] = 1;
  start = a[*st.begin()];
  while (!st.empty()) {
    for (auto &i : f[start]) {
      st.insert(idx[i]);
    }
    while (vis[*st.begin()] == 1 || (*st.begin()) > idx[start])
      st.erase(st.begin());
    if (st.empty()) break;
    start = a[*st.begin()];
    vis[*st.begin()] = 1;
  }
  int ans = 0;
  for (int i = (1); i < (n); i++)
    if (vis[i]) ans++;
  printf("%d", ans);
  return 0;
}
