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

#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define ll long long int
#define pii pair<int,int>
#define pll pair<long long int,long long int>
#define pci pair<char,int
#define mii map<int,int>
#define mll map<long long int,long long int>
#define mci map<char,int>
#define umii unordered_map<int,int>
#define umll unordered_map<long long int,long long int>
#define umci unordered_map<char,int>
#define F first
#define S second
#define pb push_back
#define endl '\n'
#define mod 1000000007
using namespace std;
#define maxval 10003000
ll gcd(ll a,ll b) {
   if (b == 0)
   return a;
   return gcd(b, a % b);
}
int main(){
   IOS;
ll t;t=1;//cin>>t;

while(t--){
ll n;cin>>n;ll m;cin>>m;
ll a[n];
for(ll i=0;i<n;i++) cin>>a[i];
for(ll i=0;i<n;i++){
    if(a[i]%4==0){cout<<"0";return 0;}
    else a[i]=a[i]/2;
    
}
ll ans=a[0];map<ll,ll> m1;
m1[ans]++;
for(ll i=1;i<n;i++){
   if(m1[a[i]]==0){
       ans=(ans*a[i])/(gcd(ans,a[i]));
       if(ans>m) {ans=0;break;}
   }
    
}
//cout<<ans<<"\n";
if(ans==0) {cout<<ans;return 0;}

m=m/ans;
cout<<(m+1)/2;

} 
    

    
return 0;    
}