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 JavaScript (node.js v5.12) (judge verdict: Accepted)

"use strict";
function I(s,f){this._s=s.split("\n");this._c=0;this._l=0;this._f=f||Number}I.prototype.a=function(){var l=this._s[this._l];if(!l)return;var t=l.trim().split(" ");var a=t[this._c];this._c++;if(t.length===this._c){this._c=0;this._l++}return this._f(a)};I.prototype.l=function(){var l=this._s[this._l];if(!l)return;this._c=0;this._l++;return l.split(" ").map(this._f)};module.exports=I;

function main(input) {
  const o = new I(input);

  const N = o.a();
  const M = o.a();

  const divisors = [];
  for (let i = 1; i<= Math.sqrt(M); i++) {
    if (M % i === 0) {
      divisors.push(i);
    }
  }

  for (let i=divisors.length - 1; i >= 0; i--) {
    const j = M / divisors[i];
    if ( j > divisors[divisors.length - 1]) {
      divisors.push(j);
    }
  }

  let max = 1;
  for ( let i =0; i< divisors.length; i++) {
    if ( M / divisors[i] >= N) {
      max = divisors[i];
    }
  }
  console.log(max);
}


main(require("fs").readFileSync("/dev/stdin", "utf8"));