fun main(args: Array<String>) {

    var list = readLine()!!.split(" ").map { it.toInt() }
    val mokuhyo = list[1]

    var numList = readLine()!!.split(" ").map { it.toInt() }
    // group byの戻り値ってなんだろう？ペアリストかな？mutableListじゃないとgroup byできない？
    val groupMap = numList.groupBy { it }
    // LOOK mapのソートってどうなっている？keyソート、valueソート
    // key sort
    //    groupMap.toSortedMap()
    // value sort
    // LOOK ソート処理結果はmutableであっても変数入れ直し必要。3回目くらいなのでOK
    // Maoの値を変更する場合はtoMutableMapしておく toMap().toMutableMap()??
    // atCoderでtoMutableMapが使えないのだが・・・filterなど高級関数で無理やり対応する
    var sortedGroupMap = groupMap.toList().sortedByDescending { it.second.count() }.toMap()

    // Mapのキー数がNになるまで、末尾のオブジェクトをカウントして消去していたけれど、性能的にNGだった
    // キー集合N以降の数値については、全て書き換える必要があって、それをカウントすれば良いだけ
    var result = 0

    // Mapでインデックスな処理はできない、何番目のオブジェクトといったような。なのでリストに変換する
    val sortedGroupList = sortedGroupMap.toList()
    // LOOK rangeで末端がItarableのサイズであれば、untilにすること
    for (i in mokuhyo until sortedGroupMap.size)
        result += sortedGroupList[i].second.count()

    println(result)
//    while (mokuhyo < sortedGroupMap.count()) {
//        // 種類が多いので、変換処理を実施
//        // LOOK Mapの先頭、末尾のオブジェクトって取れる？
//        val last = sortedGroupMap.toList().last()
////        val first = sortedGroupMap.toList().first()
//        result += last.second.count()
//        // LOOK Mapの要素を削除したい
////        sortedGroupMap.remove(last.first)
//        sortedGroupMap = sortedGroupMap.filter { it.key != last.first }
//
//    }
//    println(result)
}