#include <bits/stdc++.h>
using namespace std;
string tostring(int a) {
  ostringstream temp;
  temp << a;
  return temp.str();
}
long long gcd(long long a, long long b) {
  if (a == 0) {
    return b;
  } else {
    return gcd(b % a, a);
  }
}
long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
bool isPrime(unsigned long long n) {
  if (n <= 3) {
    return n > 1;
  }
  if (n % 2 == 0 || n % 3 == 0) {
    return false;
  }
  for (unsigned long long i = 5; i * i <= n; i += 6) {
    if (n % i == 0 || n % (i + 2) == 0) {
      return false;
    }
  }
  return true;
}
template <class T>
void reverse(T *a, int n) {
  T *skizb = a, *verj = a + n - 1;
  while (skizb < verj) {
    swap(*skizb, *verj);
    skizb++;
    verj--;
  }
}
long long fact(long long in) {
  if (in == 0 || in == 1) {
    return 1;
  }
  long long res = 1, mult = 2;
  while (mult < in + 1) {
    res *= mult;
    mult++;
  }
  return res;
}
struct str {
  int x, y, z;
  bool operator<(const str rhs) const {
    if (x < rhs.x) {
      return true;
    } else if (x == rhs.x) {
      if (y < rhs.y) {
        return true;
      } else if (y == rhs.y) {
        return z < rhs.z;
      }
    }
    return false;
  }
} sv[8];
long long exp(long long n, long long r, long long md) {
  if (r == 0) {
    return 1;
  }
  long long ans = exp(n, r / 2, md);
  ans *= ans;
  ans %= md;
  if (r & 1) {
    ans *= n;
    ans %= md;
  }
  return ans % md;
}
long long choose(long long n, long long r, long long md) {
  long long ans = 1;
  for (int i = n - r + 1; i < n + 1; ++i) {
    ans *= i;
    ans %= md;
  }
  for (int i = 1; i < r + 1; ++i) {
    ans *= exp(i, md - 2, md);
    ans %= md;
  }
  return ans % md;
}
int t[107][107];
int main() {
  int n, x, res = 0;
  cin >> n >> x;
  set<pair<int, int>> m;
  for (int i = 1; i < n + 1; ++i) {
    if (x % i == 0) {
      m.insert({i, x / i});
      m.insert({x / i, i});
    }
  }
  for (set<pair<int, int>>::iterator it = m.begin(); it != m.end(); ++it) {
    if (it->first <= n && it->second <= n) {
      ++res;
    }
  }
  cout << res << endl;
  return 0;
}

### Prompt

In Cpp, your task is to solve the following problem:

Let's consider a table consisting of n rows and n columns. The cell located at the intersection of i-th row and j-th column contains number i × j. The rows and columns are numbered starting from 1.

You are given a positive integer x. Your task is to count the number of cells in a table that contain number x.

Input

The single line contains numbers n and x (1 ≤ n ≤ 105, 1 ≤ x ≤ 109) — the size of the table and the number that we are looking for in the table.

Output

Print a single number: the number of times x occurs in the table.

Examples

Input

10 5


Output

2


Input

6 12


Output

4


Input

5 13


Output

0

Note

A table for the second sample test is given below. The occurrences of number 12 are marked bold. 

<image>

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
string tostring(int a) {
  ostringstream temp;
  temp << a;
  return temp.str();
}
long long gcd(long long a, long long b) {
  if (a == 0) {
    return b;
  } else {
    return gcd(b % a, a);
  }
}
long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
bool isPrime(unsigned long long n) {
  if (n <= 3) {
    return n > 1;
  }
  if (n % 2 == 0 || n % 3 == 0) {
    return false;
  }
  for (unsigned long long i = 5; i * i <= n; i += 6) {
    if (n % i == 0 || n % (i + 2) == 0) {
      return false;
    }
  }
  return true;
}
template <class T>
void reverse(T *a, int n) {
  T *skizb = a, *verj = a + n - 1;
  while (skizb < verj) {
    swap(*skizb, *verj);
    skizb++;
    verj--;
  }
}
long long fact(long long in) {
  if (in == 0 || in == 1) {
    return 1;
  }
  long long res = 1, mult = 2;
  while (mult < in + 1) {
    res *= mult;
    mult++;
  }
  return res;
}
struct str {
  int x, y, z;
  bool operator<(const str rhs) const {
    if (x < rhs.x) {
      return true;
    } else if (x == rhs.x) {
      if (y < rhs.y) {
        return true;
      } else if (y == rhs.y) {
        return z < rhs.z;
      }
    }
    return false;
  }
} sv[8];
long long exp(long long n, long long r, long long md) {
  if (r == 0) {
    return 1;
  }
  long long ans = exp(n, r / 2, md);
  ans *= ans;
  ans %= md;
  if (r & 1) {
    ans *= n;
    ans %= md;
  }
  return ans % md;
}
long long choose(long long n, long long r, long long md) {
  long long ans = 1;
  for (int i = n - r + 1; i < n + 1; ++i) {
    ans *= i;
    ans %= md;
  }
  for (int i = 1; i < r + 1; ++i) {
    ans *= exp(i, md - 2, md);
    ans %= md;
  }
  return ans % md;
}
int t[107][107];
int main() {
  int n, x, res = 0;
  cin >> n >> x;
  set<pair<int, int>> m;
  for (int i = 1; i < n + 1; ++i) {
    if (x % i == 0) {
      m.insert({i, x / i});
      m.insert({x / i, i});
    }
  }
  for (set<pair<int, int>>::iterator it = m.begin(); it != m.end(); ++it) {
    if (it->first <= n && it->second <= n) {
      ++res;
    }
  }
  cout << res << endl;
  return 0;
}

```