#include <iostream>
#include <vector>
#include <queue>
using namespace std;
//本题主要考察队列的出入,对队列元素的访问和判断
//小技巧:对于栈或者队列中的元素,我们希望访问其中的中间值
//,但直接访问做不到,因此我们可以借助一个数组来记录队列(栈)中的元素
//状态,这使得我们可以间接访问队列中的元素(虽然只能知道0和1两种状态)
int main() {
int m{},n{};//定义题目数据
cin>>m>>n;
int miss{};//定义miss次数
queue<int> q;//定义队列q
vector<int> a(2003);//定义数组,记得范围要大一点
//这里数组用于记录元素状态,我们约定0为假,1为真(也就是在不在队中)
int num;//输入的单词
for(int i=0;i<n;i++)//对文章进行遍历
{
cin>>num;//输入文章单词
if(a[num]==0)//如果单词不在队中
{
if(q.size()<m)//如果容器未满
{
q.push(num);//将单词入队
}
else {
a[q.front()]=0;//否则先将队首状态设为出队
q.pop();//出队操作
q.push(num);//将现有单词入队
}
miss++;//miss次数加一
a[num]=1;//将单词计入进队
}
}
cout<<miss;
return 0;
}
// 64 位输出请用 printf("%lld")