#include<bits/stdc++.h>
using namespace std;
#define INT __int128
#define ll long long
#define pii pair<int,int>
#define pll pair<long long,long long>
#define cst const
#define u_mp unordered_map
#define u_st unordered_set
#define prio_q priority_queue
#define fastrd ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define rep(i,a,b,c) for(i=a;i<=b;i+=c)
#define arep(i,a,b,c) for(i=a;i>=b;i-=c)
#define pb push_back
cst int INFi=0x3f3f3f3f;
cst ll INFl=0x3f3f3f3f3f3f3f3f;
cst INT INFI=0x3f3f3f3f3f3f3f3f;
template<class T>
T read(){
	char c;
	bool flag=0;
	while(c<'0'||c>'9'){
		c=getchar();
		if(c=='-'){
			flag=1;
		}
	}
	T a=0;
	while(isdigit(c)){
		a=a*10+(c-'0');
		c=getchar();
	}
	if(flag){
		a=-a;
	}
	return a;
}
template<class T>
void print(T a){
	if(a<0){
		putchar('-');
		a=-a;
	}
	if(a>9){
		print(a/10);
	}
	putchar((char)((a%10)+'0'));
}
template<class T>
void v_clear(vector<T>& ve){
	vector<T>no;
	swap(ve,no);
}
template<class T>
void us_clear(u_st<T>& ve){
	u_st<T>no;
	swap(ve,no);
}
template<class T,class T1>
void um_clear(u_mp<T,T1>& ve){
	u_mp<T,T1>no;
	swap(ve,no);
}
template<class T,class T1,class T2>
T qmax(T1 a,T2 b){
	return (a>b?a:b);
}
template<class T,class T1,class T2>
T qmin(T1 a,T2 b){
	return (a<b?a:b);
}
u_st<int>st;
int main(){
	fastrd
	int a,b;
	cin>>a>>b;
	int ans=0;
	for(int i=a;i<=b;i++){
		int t=i;
		int le=floor(log(i)/log(10));
		us_clear(st);
		bool f=1;
		while(t){
			st.insert(t%10);
			if(t%10>le){
				f=0;
				break;
			}
			t/=10;
		}
		if(f&&st.size()==le+1){
			//cerr<<i<<endl;
			ans++;
		}
	}
	cout<<ans;
	return 0;
}