#include <bits/stdc++.h>

using namespace std;
#define int long long


#define ff first
#define ss second
#define endl "\n"
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x.size())
#define PI 3.1415926535897932384626433832795
int MOD=1e9+7;
int powmod(int a,int l, int md){int res=1;while(l){if(l&1)res=res*a%md;l/=2;a=a*a%md;}return res;}
int binpow(int a,int l){int res=1;while(l){if(l&1)res=res*a;l/=2;a=a*a;}return res;}
typedef long long ll; typedef vector<ll> vi; typedef pair<ll, ll> ii; typedef vector<ii> vii;
#define pb push_back
int __set(int b, int i) {return b|(1<<i);} //set ith bit
int __unset(int b, int i) {return b&(~(1UL<<i));}
int __check(int b, int i) {return b&(1<<i);} //returns 0 if ith bit is 0
int mulmod(int a, int b, int md) {return ((a%md)*(b%md))%md;}
int addmod(int a, int b, int md) {return (a+b)%md;}
int submod(int a, int b, int md) {return (((a-b)%md)+md)%md;}
int divmod(int a, int b, int md) {return mulmod(a, powmod(b, md-2, md), md);} //if md is prime;
const ll inf = 0xFFFFFFFFFFFFFFFL; //very large number
priority_queue<int, vector<int>, greater<int> > pq; //for min priority_queue
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
clock_t time_p=clock();
void time()
{
    time_p=clock()-time_p;
    cerr<<"Time Taken : "<<(float)(time_p)/CLOCKS_PER_SEC<<"\n";
}

#define arr (int)(4e3)

int f[arr];
int rf[arr];

int C(int l,int k, int md) 
{
    if (k<0||k>l){
        return 0;
    }
    return f[l]*rf[k]%md*rf[l-k]%md;
}

void precfac() {
    f[0]=1;
    for (int i=1;i<arr;i++){
        f[i]=f[i-1]*i%MOD;
    }
    rf[arr-1]=powmod(f[arr-1],MOD-2, MOD);
    for (int i=arr-2;i>=0;i--){
        rf[i]=rf[i+1]*(i+1)%MOD;
    }
}

signed main(void)
{
	IOS;
	// int n;
	// cin>>n;
	// vi a(n); vi b(n);
	// for(int  i = 0; i < n; i++) {
	// 	cin>>a[i];
	// }
	// for(int i = 0; i < n; i++)
	// 	cin>>b[i];
	// vi c=a; vi d=b;
	// int cnt=0;
	// while(1) {
	// 	int no=0;
	// 	for(int i = 0; i < n; i++) {
	// 		if(d[i]!=a[i]) {
	// 			no=1;
	// 			break;
	// 		}
	// 	}
	// 	if(!no) {
	// 		cout<<cnt<<endl;
	// 		return 0;
	// 	}
	// 	if(!next_permutation(all(d))) {
	// 		break;
	// 	}
	// 	cnt++;
	// }
	// cnt=0;
	// while(1) {
	// 	// for(int i: c)
	// 	// 	cout<<i<<" ";
	// 	// cout<<endl;
	// 	// for(int i: b)
	// 	// 	cout<<i<<" ";
	// 	// cout<<endl;
	// 	int no=0;
	// 	for(int i = 0; i < n; i++) {
	// 		if(c[i]!=b[i]) {
	// 			no=1;
	// 			break;
	// 		}
	// 	}
	// 	if(!no) {
	// 		cout<<cnt<<endl;
	// 		return 0;
	// 	}
	// 	if(!next_permutation(all(c))) {
	// 		break;
	// 	}
	// 	cnt++;
	// }


	// int cnt=0;
	// int n; cin>>n;
	// string s; cin>>s;
	// for(int i = 0; i <= n-3; i++) {
	// 	if(s[i]=='A' && s[i+1]=='B' && s[i+2]=='C') {
	// 		cnt++;
	// 	}
	// }
	// cout<<cnt<<endl;

	// int k,x; cin>>k>>x;
	// if(k*500 >= x) {
	// 	cout<<"Yes"<<endl;
	// } else
	// cout<<"No"<<endl;
	int n,m;
	cin>>n>>m;
	vi a(n);
	for(int i = 0; i < n; i++) {
		cin>>a[i];
		a[i]/=2;
	}
	int l=a[0];
	for(int i = 1; i < n; i++) {
		int g=__gcd(l,a[i]);
		l/=g;
		if(l<(int)1e10/a[i]) {
			l *= a[i];
		} else {
			cout<<0<<endl;
			return 0;
		}
	}
	int pp=0;
	int nn = a[0];
	while(nn%2==0) {
		nn/=2;
		pp++;
	}
	for(int i = 1; i < n; i++) {
		nn=a[i]; int tp=0;
		while(nn%2==0) {
			nn/=2;
			tp++;
		}
		if(tp!=pp) {
			cout<<0<<endl;
			return 0;
		}
	}
	if(l > m) {
		cout<<0<<endl;
		return 0;
	}
	int mx = m/l;
	int o = mx-(mx/2);
	cout<<o<<endl;
	return 0;
}

Measured memory_bytes: 1024