AtCoder Beginner Contest 296 D

https://atcoder.jp/contests/abc296/tasks/abc296_d

単に割り切れる数を探しているだけですが、トラップがあります。

// M<=ab
#![allow(non_snake_case)]

use std::cmp::max;


//////////////////// library ////////////////////

fn read<T: std::str::FromStr>() -> T {
    let mut line = String::new();
    std::io::stdin().read_line(&mut line).ok();
    line.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace()
            .map(|e| e.parse().ok().unwrap()).collect()
}


//////////////////// process ////////////////////

fn read_input() -> (i64, i64) {
    let v = read_vec();
    (v[0], v[1])
}

fn f(N: i64, M: i64) -> i64 {
    for n in M.. {
        if N <= 10000000 && n > N * N {
            return -1
        }
        for d in max(1, (n-1)/N+1).. {
            if d * d > n {
                break
            }
            else if n % d == 0 {
                return n
            }
        }
    }
    -1  // ここには来ない
}

fn main() {
    let (N, M) = read_input();
    println!("{}", f(N, M))
}