社团管理
题号:NC201911
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

火山哥管理着一个 个人的社团。
有一天,这 个人要外出执行 个任务。这 个人从左到右站成了一排,其中第 个人支持 a_i 当老大。为了方便管理,火山哥决定把这 个人分成恰好 段(每段非空)分别执行各自的任务。
但是为了社团平衡,火山哥决定要让执行同一任务且a_i相同的二元组 尽量少,即假设在第 段里支持第 个人的个数是 ,那么火山哥就需要最小化

请你输出这个最小值。

输入描述:

第一行两个整数 ,意义如题面所示。
接下来 行一共 个整数,其中第 个表示 a_i


输出描述:

一个整数,表示答案。
示例1

输入

复制
8 2
2 3 3 5 4 1 8 8

输出

复制
1
示例2

输入

复制
4 1
1 1 1 1

输出

复制
6