← Home
package main

import (
	"bufio"
	"io"
	"os"
	"strconv"
)

type FastReader struct {
	r   io.Reader
	buf []byte
	i   int
	n   int
}

func NewFastReader(r io.Reader) *FastReader {
	return &FastReader{r: r, buf: make([]byte, 1<<20)}
}

func (fr *FastReader) read() int {
	if fr.i >= fr.n {
		var err error
		fr.n, err = fr.r.Read(fr.buf)
		fr.i = 0
		if err != nil || fr.n == 0 {
			return -1
		}
	}
	b := fr.buf[fr.i]
	fr.i++
	return int(b)
}

func (fr *FastReader) nextInt() int {
	b := fr.read()
	for b != -1 && b <= ' ' {
		b = fr.read()
	}
	sign := 1
	if b == '-' {
		sign = -1
		b = fr.read()
	}
	val := 0
	for b > ' ' {
		val = val*10 + (b - '0')
		b = fr.read()
	}
	return sign * val
}

func main() {
	fr := NewFastReader(os.Stdin)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	n := fr.nextInt()
	k := fr.nextInt()
	a := make([]int, n)
	for i := 0; i < n; i++ {
		a[i] = fr.nextInt()
	}

	maxA := 1000000
	cnt := make([]int, maxA+2)
	l := 0
	bestL, bestR := 0, 0
	bestLen := 0
	distinct := 0

	for r := 0; r < n; r++ {
		v := a[r]
		if cnt[v] == 0 {
			distinct++
		}
		cnt[v]++
		for distinct > k {
			vv := a[l]
			cnt[vv]--
			if cnt[vv] == 0 {
				distinct--
			}
			l++
		}
		if r-l+1 > bestLen {
			bestLen = r - l + 1
			bestL = l
			bestR = r
		}
	}

	out.WriteString(strconv.Itoa(bestL + 1))
	out.WriteByte(' ')
	out.WriteString(strconv.Itoa(bestR + 1))
	out.WriteByte('\n')
}