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<usize> = (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);
}