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)

#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
#include<math.h>
#include<string>
#include <iomanip>
#include<deque>
#include<queue>
#include<stack>
#include<set>


using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef int itn;
const ll LINF = 1e18;
const int INF = 1e9;

//マクロ定義
#define vvint(vec,n,m,l) vector<vector<int>> vec(n, vector<int>(m,l));	// lで初期化
#define vvll(vec,n,m,l) vector<vector<ll>> vec(n,vector<ll>(m,l));
#define vint vector<int>
#define pint pair<int,int>
#define rep(i,a) for(int i=0;i<(a);i++)
#define all(x) (x).begin(),(x).end()
#define debug system("pause")				//デバッグ用
#define ret return 0

template<class T>bool chmax(T & a, const T & b) { if (a < b) { a = b; return 1; } return 0; }
template<class T>bool chmin(T& a, const T& b) { if (b < a) { a = b; return 1; } return 0; }

#define ketasitei setprecision(15) //15桁表示

long long gcd(long long a, long long b)
{
	long long tmp, r;
	if (a < b)
	{
		tmp = a;
		a = b;
		b = tmp;
	}
	r = a % b;
	while (r != 0)
	{
		a = b;
		b = r;
		r = a % b;
	}

	return b;
}
long long lcm(long long a, long long b)
{
	long long tmp, x;
	x = a * b;
	return x / gcd(a, b);
}
int main(void)
{
	cin.tie(0);
	ios::sync_with_stdio(false);

	ll n;
	cin >> n;
	ll m;
	cin >> m;
	m *= 2;
	vector<ll> a(n), tmp(n);
	rep(i, n)
	{
		cin >> a[i];
		tmp[i] = a[i];
	}

	bool isEven = false;
	bool isOdd = false;
	ll minEven = INF, evnum = 0;

	for (int i = 0; i < n; i++)
	{
		ll tmpn = tmp[i];
		while (tmpn % 2 != 1)
		{
			tmpn /= 2;
			evnum++;
		}
		if (minEven == evnum || i==0)
		{
			minEven = evnum;
			evnum = 0;
			continue;
		}
		else
		{
			cout << 0 << endl;
			ret;
		}
		evnum = 0;
	}
	//for (int i = 0; i < n; i++)
	//{
	//	for (int j = 0; j < minEven; j++)
	//	{
	//		tmp[i] /= 2;
	//	}
	//	if (tmp[i] % 2 == 0)
	//	{
	//		isEven = true;
	//	}
	//	if (tmp[i] % 2 == 1)
	//	{
	//		isOdd = true;
	//	}
	//	if (isEven && isOdd)
	//	{
	//		cout << 0 << endl;
	//		ret;
	//	}
	//}

	ll gcnum = a[0];
	for (int i = 1; i < n; i++)
	{
		gcnum = lcm(a[i], gcnum);
	}

	ll ans = 0;
	for (int i = 1; gcnum * i <= m; i++)
	{
		if (i % 2 == 1)
		{
			ans++;
		}
	}
	cout << ans << endl;

	return 0;
}