n,m=list(map(int,input().split()))

a=list(map(int,input().split()))

def gcd(a,b):

  while b:a,b=b,a%b

  return a

def lcm(a,b):return a*b//gcd(a,b)

l=a[0]//2

ll=a[0]

for i in range(1,n):

  if a[i]%2:odd=True

  else:even=True

  l=lcm(l,a[i]//2)

  ll=lcm(ll,a[i])

  if l>m:print((0));exit()

for i in range(n):

  if l%a[i]==0:print((0));exit()

print(((m-l)//ll+1))
'''ika tako

小数が出てくるとややこしいが、 bi=ai/2  として、 

X=bi*(2p+1)  としてしまえばいい。

これで、以下の2つを満たせばよいことがわかりやすくなる。

X  は全ての  bi  の公倍数

X  を  bi  で割った商は全て奇数

なので、とりあえず全ての  bi  の最小公倍数を求めて、それが  

bi  で割ると全て奇数となるか確認する。

1つでも偶数となるものがあれば、達成不可能。

全て奇数なら、最小公倍数の奇数倍が全て条件を満たす。

2数  n,m  の最小公倍数は、最大公約数を  g  として  

n*m/g  で求められる。3数以上なら、これを繰り返し適用しつづければよい。

ただし  bi  が互いに素だと、最小公倍数は繰り返している内に

とてつもなく大きくなってしまう。途中で  M  以上になった時点で  

M  以下の半公倍数は不可能なので、0を出力して即終了する。

'''

from fractions import gcd

 

def solve(n, m, aaa):

    lcm = 1

    for a in aaa:

        a //= 2

        lcm *= a // gcd(lcm, a)

        if lcm > m:

            return 0

    for a in aaa:

        if int(lcm / a) == lcm / a:

            return 0

    return (m // lcm + 1) // 2



n, m = list(map(int, input().split()))

aaa = list(map(int, input().split()))

 

print((solve(n, m, aaa)))
n, m = list(map(int, input().split()))
a = list(map(int, input().split()))


def gcd(a, b):
    while b:
        a, b = b, a % b
    return a


def lcm(a, b):
    return a * b // gcd(a, b)


l = a[0] // 2
ll = a[0]
for i in range(1, n):
    if a[i] % 2:
        odd = True
    else:
        even = True
    l = lcm(l, a[i] // 2)
    ll = lcm(ll, a[i])
    if l > m:
        print((0))
        exit()
for i in range(n):
    if l % a[i] == 0:
        print((0))
        exit()
print(((m - l) // ll + 1))

"""ika tako
小数が出てくるとややこしいが、 bi=ai/2  として、 
X=bi*(2p+1)  としてしまえばいい。
これで、以下の2つを満たせばよいことがわかりやすくなる。
X  は全ての  bi  の公倍数
X  を  bi  で割った商は全て奇数
なので、とりあえず全ての  bi  の最小公倍数を求めて、それが  
bi  で割ると全て奇数となるか確認する。
1つでも偶数となるものがあれば、達成不可能。
全て奇数なら、最小公倍数の奇数倍が全て条件を満たす。
2数  n,m  の最小公倍数は、最大公約数を  g  として  
n*m/g  で求められる。3数以上なら、これを繰り返し適用しつづければよい。
ただし  bi  が互いに素だと、最小公倍数は繰り返している内に
とてつもなく大きくなってしまう。途中で  M  以上になった時点で  
M  以下の半公倍数は不可能なので、0を出力して即終了する。
"""
from fractions import gcd


def solve(n, m, aaa):
    lcm = 1
    for a in aaa:
        a //= 2
        lcm *= a // gcd(lcm, a)
        if lcm > m:
            return 0
    for a in aaa:
        if int(lcm / a) == lcm / a:
            return 0
    return (m // lcm + 1) // 2


n, m = list(map(int, input().split()))
aaa = list(map(int, input().split()))
print((solve(n, m, aaa)))

-n, m = list(map(int, input().split())) -a = list(map(int, input().split())) +"""ika tako +小数が出てくるとややこしいが、 bi=ai/2  として、 +X=bi*(2p+1)  としてしまえばいい。 +これで、以下の2つを満たせばよいことがわかりやすくなる。 +X  は全ての  bi  の公倍数 +X  を  bi  で割った商は全て奇数 +なので、とりあえず全ての  bi  の最小公倍数を求めて、それが +bi  で割ると全て奇数となるか確認する。 +1つでも偶数となるものがあれば、達成不可能。 +全て奇数なら、最小公倍数の奇数倍が全て条件を満たす。 +2数  n,m  の最小公倍数は、最大公約数を  g  として +n*m/g  で求められる。3数以上なら、これを繰り返し適用しつづければよい。 +ただし  bi  が互いに素だと、最小公倍数は繰り返している内に +とてつもなく大きくなってしまう。途中で  M  以上になった時点で +M  以下の半公倍数は不可能なので、0を出力して即終了する。 +""" +from fractions import gcd -def gcd(a, b): -    while b: -        a, b = b, a % b -    return a +def solve(n, m, aaa): +    lcm = 1 +    for a in aaa: +        a //= 2 +        lcm *= a // gcd(lcm, a) +        if lcm > m: +            return 0 +    for a in aaa: +        if int(lcm / a) == lcm / a: +            return 0 +    return (m // lcm + 1) // 2 -def lcm(a, b): -    return a * b // gcd(a, b) - - -l = a[0] // 2 -ll = a[0] -for i in range(1, n): -    if a[i] % 2: -        odd = True -    else: -        even = True -    l = lcm(l, a[i] // 2) -    ll = lcm(ll, a[i]) -    if l > m: -        print((0)) -        exit() -for i in range(n): -    if l % a[i] == 0: -        print((0)) -        exit() -print(((m - l) // ll + 1)) +n, m = list(map(int, input().split())) +aaa = list(map(int, input().split())) +print((solve(n, m, aaa)))