题目链接:https://vjudge.net/contest/9236#problem/B
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<iostream>
#define ll long long
using namespace std;
const double eps=1e-18;
ll sum[100];
const ll inf=(ll)(1e18)+500;
const ll INF=(ll)1<<31;
ll multi(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1)
{
if(ans>inf/a) return -1;
ans*=a;
}
b>>=1;
if(a>INF&&b>0) return -1;
a*=a;
}
return ans;
}
ll Find(ll x,ll k)//扩大pow()函数精度
{
ll r=(ll) pow(x,1.0/k);
ll t,p;
p=multi(r,k);
if(p==x) return r;
if(p>x||p==-1) r--;
else
{
t=multi(r+1,k);
if(t<=x&&t!=-1) r++;
}
return r;
}
ll get(ll n)
{
ll i,j,maxx;
sum[1]=n;
for(i=2;i<=64;i++)
{
sum[i]=Find(n,(ll)i);
sum[i]--;
if(sum[i]==0)
{
maxx=i;
break;
}
}
for(i=maxx;i>=2;i--)
{
for(ll j=1;j<i;j++)
{
if(i%j==0) sum[j]-=sum[i];
}
}
ll ans=0;
for(i=1;i<=maxx;i++)
{
ans+=sum[i]*i;
}
return ans;
}
int main()
{
ll l,r;
while(cin>>l>>r,l&&r)
{
cout<<get(r)-get(l-1)<<endl;
}
}