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: Runtime Error)

#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
 
#define pb push_back
#define fs first
#define se second
#define M 1000000007
ll exp(ll a,ll p)
{
	if(p==1)
		return a;
	if(p==0)
		return 1;
	ll st=exp(a,p/2);
	st=(st*st)%M;
	if(p%2 != 0)
		st=(st*a)%M;
	return st;
} 
int solve(int A, int B, int C) {
    ll mn=0,mx=1e18;
    ll ans=INT_MAX,mid;
    ll g=__gcd(A,B);
    ll l=(A*B)/g;
    cout<<l<<endl;
    while(mn<=mx)
    {
        mid=mn+(mx-mn)/2;
        ll f2=mid/A;
        ll f3=mid/B;
        ll f4=mid/l;
        ll t=f2+f3-f4;
        cout<<mid<<" "<<t<<endl;
        if(t>=A)
        {
            mx=mid-1;
            ans=min(mid,ans);
        }
        else 
        {
            mn=mid+1;
        }
        
    }
    return ans%M;
}
vector<ll>fact(10);
ll score(vector<ll>&arr)
{
	ll ans=0;
	ll n=arr.size();
	for(ll i=0;i<n;i++)
	{
		ll c=0;
		for(ll j=i+1;j<n;j++)
			if(arr[i]>arr[j])
				c++;
		ans+=c*fact[n-i-1];
	}
	return ans+1;
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	// ll t;
	// cin>>t;
	// while(t--)
	// {
		
	// }
	ll n,m;
	cin>>n>>m;
	
	set<ll>s;
	ll g=0,p=1;
	for(ll i=0;i<n;i++)
		{
			ll a;
			cin>>a;
			s.insert(a);
			g=a/2;
		}
	for(auto i:s)
	{
		ll k=i;
		k/=2;
		p*=k;
		g=((ll)(__gcd(g,k)));
	}
	ll l=p/g;
	if(s.size() == 1)
		l=g;
	// cout<<__gcd(0,9)<<endl;
	// if(l==0)
	// {
	// 	cout<<0;
	// 	return 0;
	// }
	// cout<<l<<endl;
	ll d=m/l;
	ll ans=d/2;
	if(d%2==1)
		ans++;
	cout<<ans<<endl;

}