Problem: The array a with n integers is given. Let's call the sequence of one or more consecutive elements in a segment. Also let's call the segment k-good if it contains no more than k different values.

Find any longest k-good segment.

As the input/output can reach huge size it is recommended to use fast input/output methods: for example, prefer to use scanf/printf instead of cin/cout in C++, prefer to use BufferedReader/PrintWriter instead of Scanner/System.out in Java.

Input

The first line contains two integers n, k (1 ≤ k ≤ n ≤ 5·105) — the number of elements in a and the parameter k.

The second line contains n integers ai (0 ≤ ai ≤ 106) — the elements of the array a.

Output

Print two integers l, r (1 ≤ l ≤ r ≤ n) — the index of the left and the index of the right ends of some k-good longest segment. If there are several longest segments you can print any of them. The elements in a are numbered from 1 to n from left to right.

Examples

Input

5 5
1 2 3 4 5


Output

1 5


Input

9 3
6 5 1 2 3 2 1 4 5


Output

3 7


Input

3 1
1 2 3


Output

1 1

Solution (in PYTHON):

Solution:

def solve():
    n, k = map(int, raw_input().split())
    a = map(int, raw_input().split())

    counter = [0] * 1000001

    def add(i, q):
        counter[a[i]] += 1
        if counter[a[i]] == 1:
            return q+1
        return q

    def remove(i, q):
        counter[a[i]] -= 1
        if counter[a[i]] == 0:
            return q-1
        return q

    l = r = 0
    q = add(0, 0)
    ansl, ansr = 0, -1
    while True:
        if q <= k:
            if r-l > ansr-ansl:
                ansl, ansr = l, r
        else:
            if l+1 <= r:
                q = remove(l, q)
                l += 1
                continue
            elif r+1 < n:
                r += 1
                q = add(r, q)
                continue
            else:
                break

        if r+1 < n:
            r += 1
            q = add(r, q)
        else:
            break
    print ansl+1, ansr+1


solve()