模拟 · 例3-机器翻译
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}本题转译自 [NOIP2010 提高组] 机器翻译 。
\hspace{15pt}翻译软件由临时记忆和外存记忆两部分构成。临时记忆有限,至多储存 m 个单词;外存记忆无限,可以储存任意多的单词。
\hspace{15pt}对于新出现的单词,储存规则如下:
\hspace{23pt}\bullet\,若其存在于临时记忆中,则直接使用,不进行任何操作;
\hspace{23pt}\bullet\,若其不存在于临时记忆中,那么记录一次读取,并加入临时记忆;特别的,若此时临时记忆中的单词为 m 个(储存已满),则将临时记忆中最早的那个单词释放到外存记忆,腾出空间给新单词;
\hspace{15pt}现在,对于给定的由 n 个单词构成的英语文章,一共会记录多少次单词的读取?

输入描述:

\hspace{15pt}第一行输入两个整数 m, n \left( 1 \leqq m \leqq 100;\ 1 \leqq n \leqq 10^3\right) 代表临时记忆容量、单词数量。
\hspace{15pt}第二行输入 n 个整数 a_1, a_2, \cdots, a_n \left( 0 \leqq a_i \leqq 10^3\right) ,代表一个英文单词。文章中的两个单词是同一个单词,当且仅当它们对应的整数相同。

输出描述:

\hspace{15pt}在一行上输出一个整数,代表翻译软件的读取次数。
示例1

输入

复制
2 7
1 1 4 5 1 4 1

输出

复制
5

说明

\hspace{15pt}在这个样例中,记临时记忆为 T ,翻译软件储存的过程如下:
\hspace{23pt}\bullet\,对于第一个单词 1 ,记录一次读取,由于此时临时记忆未满,直接存入;此时 T=\{1\}
\hspace{23pt}\bullet\,对于第二个单词 1 ,临时记忆中已存在,不进行任何操作;
\hspace{23pt}\bullet\,对于第三个单词 4 ,记录一次读取,由于此时临时记忆未满,直接存入,此时 T=\{1, 4\}
\hspace{23pt}\bullet\,对于第四个单词 5 ,记录一次读取,由于此时临时记忆已满,将最早存入的单词 1 释放,将新单词 5 存入临时记忆,此时 T=\{4, 5\}
\hspace{23pt}\bullet\,对于第五个单词 1 ,记录一次读取;此时 T=\{5, 1\}
\hspace{23pt}\bullet\,对于第六个单词 4 ,记录一次读取;此时 T=\{1, 4\}
\hspace{23pt}\bullet\,对于第七个单词 1 ,临时记忆中已存在,不进行任何操作;
\hspace{15pt}因此,一共会记录 5 次单词的读取。
示例2

输入

复制
100 3
0 0 0

输出

复制
1