#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
const long long MOD = 1000000007;
const int INF = 1000000007;
const long long LINF = 1LL * INF * INF;
const int MAXN = 547;
const double EPS = 1e-6;
const double PI = acos(-1.0);
long long l, r;
int CNT[10], ans = 0;
vector<int> L, R;
void rec(int last, int len) {
  if (len == (int)((L).size())) {
    long long cur = 0, d = -1;
    for (int i = (L[0] + 1); i < (10); ++i)
      if (CNT[i] && d == -1) d = i;
    if (d > -1 && d <= R[0]) {
      cur = d;
      --CNT[d];
      for (int i = (0); i < (10); ++i) {
        for (int j = (0); j < (CNT[i]); ++j) {
          cur *= 10;
          cur += i;
        }
      }
      ++CNT[d];
      if (cur <= r) {
        ++ans;
        return;
      }
    }
    if (!CNT[L[0]]) return;
    --CNT[L[0]];
    cur = L[0];
    for (int i = (10) - 1; i >= (0); --i) {
      for (int j = (0); j < (CNT[i]); ++j) {
        cur *= 10;
        cur += i;
      }
    }
    ++CNT[L[0]];
    if (cur >= l) ++ans;
    return;
  }
  for (int d = (last); d < (10); ++d) {
    ++CNT[d];
    rec(d, len + 1);
    --CNT[d];
  }
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> l >> r;
  if (l == r) {
    cout << 1;
    return 0;
  }
  for (int i = (0); i < (19); ++i) {
    L.push_back(l % 10);
    l /= 10;
  }
  for (int i = (0); i < (19); ++i) {
    R.push_back(r % 10);
    r /= 10;
  }
  while (L.back() == R.back()) {
    L.pop_back();
    R.pop_back();
  }
  reverse(L.begin(), L.end());
  reverse(R.begin(), R.end());
  for (int d : L) {
    l *= 10;
    l += d;
  }
  for (int d : R) {
    r *= 10;
    r += d;
  }
  rec(0, 0);
  cout << ans;
  return 0;
}
