#include <bits/stdc++.h>
void err() { std::cout << std::endl; }
template <typename T, typename... Args>
void err(T a, Args... args) {
  std::cout << a << ' ';
  err(args...);
}
using namespace std;
const long long mod = 1e9 + 7;
const int maxn = 2e5 + 22;
int n, m, a, b, sum;
int t[maxn];
set<int> s[maxn];
int pre[maxn], dep[maxn];
void init() {
  for (int i = 0; i <= n; i++) {
    pre[i] = i;
    dep[i] = 1;
  }
}
int find_pre(int n) {
  if (pre[n] == n) return n;
  return pre[n] = find_pre(pre[n]);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &t[i]);
    s[t[i]].insert(i);
    if (i > 1 && t[i] != t[i - 1]) sum++;
  }
  printf("%d\n", sum);
  init();
  for (int i = 1; i <= m - 1; i++) {
    scanf("%d%d", &a, &b);
    a = find_pre(a);
    b = find_pre(b);
    if (s[a].size() > s[b].size()) swap(a, b);
    pre[a] = b;
    for (auto i : s[a]) {
      if (i > 1 && t[i] != t[i - 1]) sum--;
      if (i < n && t[i] != t[i + 1]) sum--;
      t[i] = b;
      if (i > 1 && t[i] != t[i - 1]) sum++;
      if (i < n && t[i] != t[i + 1]) sum++;
      s[b].insert(i);
    }
    printf("%d\n", sum);
  }
  return 0;
}
