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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h> 
using namespace std; 
  
// function to generate and print the sequence 
void print_sequence(int n, int k) 
{ 
    // stores the maximum gcd that can be 
    // possible of sequence. 
    int b = n / (k * (k + 1) / 2); 
  
    // if maximum gcd comes out to be 
    // zero then not possible 
    if (b == 0) { 
        cout << -1 << endl; 
  
    } else { 
  
        // the smallest gcd possible is 1 
        int r = 1; 
  
        // traverse the array to find out  
        // the max gcd possible 
        for (int x = 1; x * x <= n; x++) { 
  
            // checks if the number is  
            // divisible or not 
            if (n % x != 0) 
                continue; 
  
            // checks if x is smaller then  
            // the max gcd possible and x  
            // is greater then the resultant  
            // gcd till now, then r=x 
            if (x <= b && x > r) 
                r = x; 
  
            // checks if n/x is smaller than  
            // the max gcd possible and n/x  
            // is greater then the resultant  
            // gcd till now, then r=x 
            if (n / x <= b && n / x > r) 
                r = n / x; 
        } 
  
        // traverses and prints d, 2d, 3d, 
        // ..., (k-1)·d, 
        cout<<r<<endl;
    } 
} 

int main() 
{ 
    int n,k;
    cin>>k>>n;
    
    print_sequence(n, k); 
  
    return 0;
}