For problem statement at 1000-1999/1500-1599/1510-1519/1516/problemD.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1510-1519/1516/verifierD.go ends with All tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"os"
"strconv"
)
const MAX = 100000
const LOG = 17
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
scanner := bufio.NewScanner(reader)
scanner.Split(bufio.ScanWords)
nextInt := func() int {
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
return n
}
n := nextInt()
q := nextInt()
a := make([]int, n+1)
for i := 1; i <= n; i++ {
a[i] = nextInt()
}
spf := make([]int, MAX+1)
for i := 2; i <= MAX; i++ {
if spf[i] == 0 {
spf[i] = i
if i*i <= MAX {
for j := i * i; j <= MAX; j += i {
if spf[j] == 0 {
spf[j] = i
}
}
}
}
}
factors := make([][]int, n+1)
for i := 1; i <= n; i++ {
x := a[i]
primes := []int{}
for x > 1 {
p := spf[x]
primes = append(primes, p)
for x%p == 0 {
x /= p
}
}
factors[i] = primes
}
far := make([]int, n+2)
last := make([]int, MAX+1)
r := 0
for l := 1; l <= n; l++ {
for r+1 <= n {
canAdd := true
for _, p := range factors[r+1] {
if last[p] >= l {
canAdd = false
break
}
}
if !canAdd {
break
}
r++
for _, p := range factors[r] {
last[p] = r
}
}
far[l] = r
for _, p := range factors[l] {
last[p] = 0
}
}
up := make([][]int, n+3)
for i := range up {
up[i] = make([]int, LOG+1)
}
for i := 1; i <= n; i++ {
if far[i]+1 <= n {
up[i][0] = far[i] + 1
} else {
up[i][0] = n + 1
}
}
up[n+1][0] = n + 1
for j := 1; j <= LOG; j++ {
for i := 1; i <= n+1; i++ {
up[i][j] = up[up[i][j-1]][j-1]
}
}
for i := 0; i < q; i++ {
l := nextInt()
r := nextInt()
ans := 0
cur := l
for j := LOG; j >= 0; j-- {
if up[cur][j] <= r {
cur = up[cur][j]
ans += 1 << j
}
}
writer.WriteString(strconv.Itoa(ans + 1))
writer.WriteByte('\n')
}
}
```