#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
int nxt[400005], num[400005];
bool in_que[400005] = {0};
vector<int> g[400005];
int main() {
  int i, n, k, ans = 0;
  set<pair<int, int>> s;
  scanf("%d%d", &n, &k);
  for (i = 0; i < n; i++) scanf("%d", &num[i]);
  for (i = n - 1; i >= 0; i--) {
    if (!g[num[i]].size()) {
      nxt[i] = n;
      g[num[i]].emplace_back(i);
    } else {
      nxt[i] = g[num[i]].back();
      g[num[i]].emplace_back(i);
    }
  }
  for (i = 0; i < n; i++) {
    if (in_que[num[i]]) {
      s.erase({i, num[i]});
      s.insert({nxt[i], num[i]});
      continue;
    }
    ans++;
    if ((int)s.size() < k) {
      s.insert({nxt[i], num[i]});
      in_que[num[i]] = 1;
    } else {
      auto x = --s.end();
      in_que[(*x).second] = 0;
      s.erase(x);
      s.insert({nxt[i], num[i]});
      in_que[num[i]] = 1;
    }
  }
  printf("%d\n", ans);
}
