Problem:
Score : 400 points

Problem Statement

You are given integers N and M.

Consider a sequence a of length N consisting of positive integers such that a_1 + a_2 + ... + a_N = M. Find the maximum possible value of the greatest common divisor of a_1, a_2, ..., a_N.

Constraints

All values in input are integers.

1 \leq N \leq 10^5

N \leq M \leq 10^9

Input

Input is given from Standard Input in the following format:

N M

Output

Print the maximum possible value of the greatest common divisor of a sequence a_1, a_2, ..., a_N that satisfies the condition.

Sample Input 1

3 14

Sample Output 1

2

Consider the sequence (a_1, a_2, a_3) = (2, 4, 8). Their greatest common divisor is 2, and this is the maximum value.

Sample Input 2

10 123

Sample Output 2

3

Sample Input 3

100000 1000000000

Sample Output 3

10000

Solution in PHP7 (7.0.15) (judge verdict: Time Limit Exceeded)

<?php

function input() {
    return trim(fgets(STDIN));
}

function input_array() {
    return explode(' ', input());
}

list($N, $M) = input_array();
list($N, $M) = [(int)$N, (int)$M];

$int = $M;
$result = [];
if ($int !== 1) {
    $i = 2;
    while ($int !== 1) {
        if ($int % $i === 0) {
            $result[] = $i;
            $int = intdiv($int, $i);
        } else {
            $i++;
        }
    }    
}

$factors = array_map(function($exponent, $prime) {
    return array_map(function($exp) use ($prime) {
        return $prime ** $exp;
    }, range(0, $exponent));
}, array_values(array_count_values($result)), array_keys(array_count_values($result)));

$divisors = array_reduce($factors, function($carry, $factor) {
    $ret = [];
    for ($i = 0, $ci = count($carry); $i < $ci; $i++) {
        for ($j = 0, $cj = count($factor); $j < $cj; $j++) {
            $ret[] = $carry[$i] * $factor[$j];
        }
    }
    return $ret;
}, [1]);
sort($divisors);

for ($k = 0, $count = count($divisors); $k < $count; $k++) {
    if ($divisors[$k] * $N <= $M) {
        continue;
    } else {
        break;
    }
}

echo $divisors[$k - 1] . "\n";