← Home
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')
	}
}
```