package main
import (
"bytes"
"io"
"os"
"strconv"
)
type Query struct {
r int
id int
}
func main() {
buf, _ := io.ReadAll(os.Stdin)
pos := 0
readInt := func() int {
for pos < len(buf) && (buf[pos] < '0' || buf[pos] > '9') {
pos++
}
if pos >= len(buf) {
return 0
}
res := 0
for pos < len(buf) && buf[pos] >= '0' && buf[pos] <= '9' {
res = res*10 + int(buf[pos]-'0')
pos++
}
return res
}
t := readInt()
if t == 0 {
return
}
const N = 200000
queries := make([][]Query, N+1)
for i := 0; i < t; i++ {
l := readInt()
r := readInt()
queries[l] = append(queries[l], Query{r, i})
}
ans := make([]int64, t)
fen := make([]int64, N+1)
add := func(idx int, val int64) {
for ; idx <= N; idx += idx & -idx {
fen[idx] += val
}
}
query := func(idx int) int64 {
var s int64
for ; idx > 0; idx -= idx & -idx {
s += fen[idx]
}
return s
}
C := make([]int64, N+1)
for i := N; i >= 1; i-- {
for k := 2 * i; k <= N; k += i {
if C[k] > 0 {
add(k, C[k])
}
C[k]++
}
if i%3 == 0 {
k2 := 2 * i
if k2 <= N {
add(k2, 1)
}
}
if i%6 == 0 {
k3 := 5 * i / 2
if k3 <= N {
add(k3, 1)
}
}
for _, q := range queries[i] {
n := int64(q.r - i + 1)
total := n * (n - 1) * (n - 2) / 6
bad := query(q.r)
ans[q.id] = total - bad
}
}
var out bytes.Buffer
for i := 0; i < t; i++ {
out.WriteString(strconv.FormatInt(ans[i], 10))
out.WriteByte('\n')
}
os.Stdout.Write(out.Bytes())
}