Problem:
Score : 400 points

Problem Statement

Given are a sequence A= {a_1,a_2,......a_N} of N positive even numbers, and an integer M.

Let a semi-common multiple of A be a positive integer X that satisfies the following condition for every k (1 \leq k \leq N):

There exists a non-negative integer p such that X= a_k \times (p+0.5).

Find the number of semi-common multiples of A among the integers between 1 and M (inclusive).

Constraints

1 \leq N \leq 10^5

1 \leq M \leq 10^9

2 \leq a_i \leq 10^9

a_i is an even number.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N M
a_1 a_2 ... a_N

Output

Print the number of semi-common multiples of A among the integers between 1 and M (inclusive).

Sample Input 1

2 50
6 10

Sample Output 1

2

15 = 6 \times 2.5

15 = 10 \times 1.5

45 = 6 \times 7.5

45 = 10 \times 4.5

Thus, 15 and 45 are semi-common multiples of A. There are no other semi-common multiples of A between 1 and 50, so the answer is 2.

Sample Input 2

3 100
14 22 40

Sample Output 2

0

The answer can be 0.

Sample Input 3

5 1000000000
6 6 2 6 2

Sample Output 3

166666667

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

    #define _USE_MATH_DEFINES
    #include <iostream>
    #include <string>
    #include <utility>
    #include <stack>
    #include <vector>
    #include <queue>
    #include <algorithm>
    #include <map>
    #include <climits>
    #include <set>
    #include <cmath>
    #include <numeric>
    #include <iomanip>
     
    using namespace std;
    set <long long> set_a;
    long long gcd(long long m, long long n){
      if(n > m){
        return gcd(n, m);
      } else if(n == 0){
        return m;
      }
      return gcd(n, m % n);
    }
    int main(void){
      int N;
      long long M;
      int max_2_power = 0;
      int min_2_power = INT_MAX;
      cin >> N >> M;
      for(int i = 0; i < N; i++){
        long long a;
        cin >> a;
        set_a.insert(a / 2);
     
        int tmp_2_power = 0;
        while(a % 2 == 0){
          tmp_2_power ++;
          a /= 2;
        }
        max_2_power = max(max_2_power, tmp_2_power);
        min_2_power = min(min_2_power, tmp_2_power);
      }
      if(min_2_power == 0 || (max_2_power != min_2_power)){
        //cout << max_2_power << " " << min_2_power << endl;
        cout << 0 << endl;
      } else {
        long long gcd_a = *set_a.begin();
        for(auto it = set_a.begin(); it != set_a.end(); it++){
          gcd_a = gcd(gcd_a, *it);
        }
        long long lcm = gcd_a;
        for(auto it = set_a.begin(); it != set_a.end(); it++){
          lcm *= *it / gcd_a;
          if(lcm > M){
            cout << 0 << endl;
            return 0;
          }
        }
        long long tmp = M / lcm;
        //cout << lcm << " " << gcd_a << endl;
        if(tmp % 2 == 0){
          cout << tmp / 2 << endl;
        } else {
          cout << tmp / 2 + 1 << endl;
        }
      }
     
      return 0;
    }