#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>

using namespace std;

#define llint long long

llint A, B;
vector <int> P;

int ppower (int x) {
  int ret = 0, idx = 0;
  
  for (int i = 0; i < P.size(); ++i)
    if (x % P[i] == 0) {
      ++ret;
      idx = P[i];
    }

  if (ret != 1)
    return -1;
  return idx;
}

bool isprime (int x) {
  for (int y = 2; y * y <= x; ++y)
    if (x % y == 0)
      return false;
  return true;
}

llint calc (llint x) {
  if (x == 2)
    return 0;
  for (llint y = 2; y <= x; ++y)
    if (x % y != 0)
      return 1 + calc(y);
  return 0;
}

llint f (llint t) {
  if (t == 1) return 2;
  if (t == 2) return 5;

  llint ret = 0;
  llint um = 1;

  for (int i = 1; i <= t + 1 && um <= t; ++i) {
    //printf("t = %lld, i = %d\n",t,i);
    int pp = ppower(i);

    //  printf("i = %d, pp = %d\n",i,pp);

    if (pp == -1)
      continue;

    llint dj = t / um;
    dj -= dj / pp;
    ret += dj * (calc(i) + 2);
    //printf("um = %lld, dj = %lld\n",um,dj);
    um *= pp;
    //printf("ret = %lld\n",ret);
  }

  return ret;
}

llint f2 (llint A, llint B) {
  llint ret = 0;
  for (llint x = A; x <= B; ++x)
    ret += calc(x) + 1;
  return ret;
}  

int main (void) {
  scanf("%lld %lld",&A,&B);

  llint um = 1;
  for (int x = 2; um <= B; ++x)
    if (isprime(x)) {
      um *= x;
      P.push_back(x);
    }


  printf("%lld\n",f(B) - f(A - 1));

  return 0;
}
