G - Muelle divisor

Languages: C, C++, Java, Haskell, Pascal, Python, JavaScript, Tiger, C#
Time & Memory limits: (details)

Fito está desarrollando un juego que contiene varios tipos de puzles matemáticos. Algunos son muy difíciles de resolver, al extremo que se ve obligado a usar una computadora.

El puzle que ocupa por estos días su atención, se llama muelle divisor. El juego utiliza como tablero una lista con los números desde $a$ hasta $b$.  Al inicio del juego, tenemos un muelle parado sobre $a$ con la mitad inferior pintada de blanco. En cada turno, el muelle se puede doblar hacia la derecha hasta que el extremo libre toque un número del tablero.

Si $d$ es la distancia entre los números de los extremos y $x$ es el entero sobre el que está la mitad blanca del muelle, se dice que el movimiento es válido si $mindiv(x) \leq d \leq maxdiv(x)$, donde $mindiv$ y $maxdiv$ devuelven respectivamente el menor y mayor divisor propio de $x$. En caso de que el movimiento resulte válido, entonces se libera el extremo izquierdo del muelle y este queda parado sobre el número de la derecha y con las mitades intercambiadas. Un jugador gana si logra llegar con el muelle hasta $b$, sin importar el color de la mitad. Después de fallar varias veces en un nivel, Fito quiere calcular la cantidad de formas de ganar haciendo siempre movimientos válidos.

Input

La primera línea de la entrada contiene dos enteros $a$ y $b$ $(1 \leq  a<b \leq 10^{9}, b-a \leq 200000)$ separados por un espacio, representando los números del inicio y fin del juego.

Output

La salida consiste en un entero con la cantidad de formas de ganar el juego haciendo movimientos válidos. Como este número puede ser muy grande se debe imprimir el resto de su división por $1000000007$.

Sample test(s)

Input
6 16
Output
12