fn main() { let (n, k) = { let mut line = String::new(); std::io::stdin().read_line(&mut line).unwrap(); let mut iter = line.split_whitespace(); ( iter.next().unwrap().parse::().unwrap(), iter.next().unwrap().parse::().unwrap(), ) }; let aa: Vec<_> = { let mut line = String::new(); std::io::stdin().read_line(&mut line).unwrap(); line.split_whitespace() .map(|x| x.parse::().unwrap() - 1) .collect() }; let mut counts = vec![0_usize; n]; for &a in &aa { counts[a] += 1; } counts.sort_unstable(); let mut rem = k; let mut cards = vec![]; for &cnt in counts.iter().rev() { if cnt >= rem { cards.push(rem); break; } cards.push(cnt); rem -= cnt; } println!("{}", cards.len()); }