RT
#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
ll a,b,k,lkn[10010],nxt[10010],ansa,ansb,fr[10010];
ll gcd(ll x,ll y){
if(!y)return x;
return gcd(y,x%y);
}ll lcm(ll x,ll y){
return y/gcd(x,y)*x;
}
void find(ll num){
if(num>b)return;
if(num)lkn[++k]=num;
find(num*10+6);
find(num*10+8);
return;
}void dfs(int s,int cnt,ll l,ll n,ll &ans){
if(l>b)return;
if(s>k){
if(!cnt)return;
if(cnt&1)ans+=n/l;
else ans-=n/l;
return;
}
dfs(nxt[s],cnt,l,n,ans);
dfs(nxt[s],cnt+1,lcm(l,lkn[s]),n,ans);
return;
}
int main(){
scanf("%lld%lld",&a,&b);
find(0);
std::sort(lkn+1,lkn+k+1,std::greater<ll>());
int st=1;
for(int i=1;i<=k;i++){
nxt[i]=i+1;
}
for(int i=k;i>=1;i--){
for(int j=k;j>i;j--){
if(!(lkn[i]%lkn[j])){
nxt[i-1]=nxt[i];
break;
}
}
}int last=0;
for(int i=0;i<=k;i=nxt[i])fr[i]=last,last=i;
for(int i=k;i>=1;i=fr[i]){
if(lkn[i]>b/2){
nxt[fr[i]]=nxt[i];
ansb+=b/lkn[i];
ansa+=a/lkn[i];
}
}
if(a!=1)dfs(nxt[0],0,1,--a,ansa);
dfs(nxt[0],0,1,b,ansb);
printf("%lld",ansb-ansa);
return 0;
}