#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
const int inf = 0x3f3f3f3f;
struct node {
  int l, r, v;
} a[maxn];
int cnt[maxn], vis[maxn];
vector<node> v;
bool cmp(node &x, node &y) { return x.l < y.l; }
int main() {
  int T;
  T = 1;
  while (T--) {
    int n, k;
    cin >> n >> k;
    for (long long i = (1); i < (n + 1); (i)++) {
      int x;
      cin >> x;
      cnt[x]++;
      a[x].v = x;
      if (!a[x].l) {
        a[x].l = a[x].r = i;
      } else {
        a[x].r = i;
      }
    }
    v.push_back(node{0, 0});
    for (long long i = (0); i < (maxn); (i)++)
      if (a[i].l) v.push_back(a[i]);
    sort(v.begin(), v.end(), cmp);
    int ans = 0;
    for (long long i = (1); i < (((int)v.size())); (i)++) {
      if (v[i].l < v[i - 1].r) {
        if (cnt[v[i].v] > cnt[v[i - 1].v]) {
          v[i - 1].v = v[i].v;
        }
        v[i - 1].r = max(v[i - 1].r, v[i].r);
        v[i] = v[i - 1];
        vis[i] = 1;
      }
    }
    for (long long i = (((int)v.size()) - 1); i >= (1); (i)--) {
      if (vis[i]) {
        v[i - 1].r = max(v[i - 1].r, v[i].r);
        v[i - 1].v = v[i].v;
      }
    }
    for (long long i = (1); i < (((int)v.size())); (i)++) {
      if (!vis[i]) {
        ans += v[i].r - v[i].l + 1 - cnt[v[i].v];
      }
    }
    cout << ans << endl;
  }
}
