/*
  Niz a [] -	redni brojevi filmova
  Niz p [] -	niz indeksa, tako da je niz a [p [i]] sortiran
  Niz q [] -	indeksi filmova koji su trenutno na disku
  Niz next [] -	sledeci index sa jednakim rednim brojem, ili n ako takav ne postoji
  n -			broj filmova
  k -			kapacitet diska
*/
/*
#include <iostream>
#include <fstream>
#define MaxN 10001
#define MaxK 501

using namespace std;
int a [MaxN], p [MaxN], next [MaxN], q [MaxK];
int n, k, sol;

void input ()
{
	ifstream in ("filmovi.in");
	in >> n >> k;
	for (int i = 0; i < n; i++)
		in >> a [i];
	in.close ();
}

void output ()
{
	ofstream out ("filmovi.out");
	out << sol << endl;
	out.close();
}

void quicksort (int l, int r)
{
	int i, j, pivota, pivoti, tmp;

	i = l;
	j = r;
	tmp = (l + r) / 2;
	pivota = a [p [tmp]];
	pivoti = p [tmp];
	do
	{
		while ((i <= r) && ((a [p [i]] < pivota) || ((a [p [i]] == pivota) && (p [i] < pivoti))))
			i++;
		while ((j >= l) && ((a [p [j]] > pivota) || ((a [p [j]] == pivota) && (p [j] > pivoti))))
			j--;
		if (i <= j)
		{
			tmp = p [i];
			p [i] = p [j];
			p [j] = tmp;
			i++;
			j--;
		}
	}
	while (i < j);
	if (i < r)
		quicksort (i, r);
	if (l < j)
		quicksort (l, j);
}

void solve ()
{
	int i, m, j, ind, max, found;

	sol = 0;
	for (i = 0; i < n; i++)
		p [i] = i;
	quicksort (0, n - 1);
	for (i = 0; i < n; i++)
		if ((i + 1 < n) && (a [p [i]] == a [p [i + 1]]))
			next [p [i]] = p [i + 1];
		else
			next [p [i]] = n;
	m = 0;
	for (i = 0; i < n; i++)
	{
		found = 0;
		ind = 0;
		max = -1;
		for (j = 0; j < m; j++)
			if (a [q [j]] == a [i])
			{
				q [j] = i;
				found = 1;
				break;
			}
			else
			{
				if (max < next [q [j]])
				{
					max = next [q [j]];
					ind = j;
				}
			}
		if (found == 0)
		{
			if (m < k)
			{
				q [m] = i;
				m++;
			}
			else
				q [ind] = i;
			sol++;
		}
	}
}

int main ()
{
	input ();
	solve ();
	output ();
	return 0;
}
*/