#include<bits/stdc++.h>
using namespace std;
int dp[][],n,m;
void init(){//dp[i][j]:i位的数,最高位是j
dp[][]=;
for(int i=;i<=;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
if(j!= && !(j== && k==))
dp[i][j]+=dp[i-][k];
}
int solve(int n){//求[0,n)范围合法的个数
int res=,len=,d[]={};
while(n)d[++len]=n%,n/=;
d[len+]=;
for(int i=len;i>=;i--){//从高到低枚举每位
for(int j=;j<d[i];++j)//枚举最高位的数
if(d[i+]!= || j!=)
res+=dp[i][j];
if(d[i]== || d[i+]== && d[i]==)break;//后面的都不用枚举了
}
return res;
}
int main(){
init();
while(cin>>n>>m,m)cout<<solve(m+)-solve(n)<<endl;
}