#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define rep1(i,n) for(ll i=1;i<=(ll)(n);i++)


int main(){
  ios::sync_with_stdio(false);
  cin.tie(0);

  ll n,x;
  cin >> n >> x;
  vector<ll> a(n);
  rep(i,n) cin >> a[i];
  ll dp[2];
  dp[0] = 1;
  dp[1] = 0;
  ll tx = x;
  rep(i,n-1){
    ll amari = tx%a[i];//前の＋
    ll amari_minus = amari - a[i];//前の-

    ll amari_now = tx%a[i+1];
    ll amari_now_minus = amari_now - a[i+1];
    // cout << amari <<" " << amari_minus << " " << amari_now << " " << amari_now_minus << endl;
    ll ndp[2];
    if(abs(amari-amari_now)<=a[i+1]-a[i]){
      //dp[0]そのまま
      ndp[0] = dp[0];
    }
    else{
      ndp[0] = 0;
    }
    if(abs(amari_minus-amari_now_minus)<=a[i+1]-a[i]){
      ndp[1] = dp[1];
    }
    else ndp[1] = 0;
    if(abs(amari_minus-amari_now)<=a[i+1]-a[i]) ndp[0] += dp[1];
    if(abs(amari-amari_now_minus)<=a[i+1]-a[i]) ndp[1] += dp[0];
    dp[0]= ndp[0];
    dp[1]= ndp[1];
    // cout << dp[0] <<" " << dp[1] << endl;
  }
  cout << dp[0] + dp[1] << endl;

  return 0;
    

}

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/trie_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")

#define int long long
#define ll long long
#define all(v) v.begin(), v.end()
#define intvect vector<int>
#define pii pair<int, int>
#define mii map<int, int>
#define fo(i, n) for (int i = 0; i < n; ++i)
#define Fo(i, k, n) for (int i = k; i < n; ++i)
#define ld long double
#define deb(x) cout << #x << " " << x << endl;
#define pb push_back
#define pob pop_back
#define lcm(a, b) (a / __gcd(a, b) * b)
#define F first
#define S second
#define ull unsigned long long

typedef tree<int, null_type, less<int>, rb_tree_tag,
             tree_order_statistics_node_update>
    indexed_set;

const ll mod = 1e9 + 7;
const ll N = (ll)5e6 + 5;

template <typename... T>
void read(T &... args)
{
    ((cin >> args), ...);
}

template <typename... T>
void write(T &&... args)
{
    ((cout << args), ...);
}

void vjudge()
{
#ifndef RTE
    if (fopen("input.txt", "r"))
    {
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    }
#endif
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}

bool iss(int n)
{
    int u = sqrt(n);
    if (u * u == n)
        return 1;
    return 0;
}
void solve()
{
    int u, v;
    cin >> u >> v;

    for (int i = 1; i < sqrt(v) + 1; i++)
    {
        if (i + v / i == u)
        {
            cout << "Yes\n";
            return;
        }
    }
    cout << "No\n";
}
int32_t main()
{
    clock_t start, end;
    start = clock();
    vjudge();
    int t = 1;
    // read(t);
    while (t--)
        solve();
    end = clock();
    double waste = double(end - start) / double(CLOCKS_PER_SEC);
    cerr << "Time wasted by program is : " << fixed
         << waste << setprecision(15);
    cerr << " sec " << endl;
}