fn main() { let mut buf = String::new(); let mut input = { use std::io::Read; std::io::stdin().read_to_string(&mut buf).unwrap(); buf.split_whitespace() }; let n: usize = input.next().unwrap().parse().unwrap(); let m: usize = input.next().unwrap().parse().unwrap(); let mut a: Vec = (0..n) .map(|_| input.next().unwrap().parse().unwrap()) .collect(); a.sort(); let mut count = vec![0; m]; for i in 0..n { let j = a[i] - 1; count[j] += 1 } let max = count.iter().filter(|&&x| x >= 1).count(); let min = if m - n == 0 && max == 1 { 1 } else { 0 }; println!("{} {}", max, min); }