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 JAVA):

Solution:
/* IMPORTANT: Multiple classes and nested static classes are supported */
 
/*
 * uncomment this if you want to read input.
import java.io.BufferedReader;
import java.io.InputStreamReader;
*/
import java.util.*;
import java.io.*;
public class Main {
private static InputStream stream;
private static byte[] buf=new byte[1024];
private static int curChar;
private static int numChars;
private static PrintWriter pw;
static long min=Long.MAX_VALUE;
private static SpaceCharFilter filter;
    public static void main(String args[] ) throws Exception 
    {
    	InputReader(System.in);
    	pw=new PrintWriter(System.out);
    	soln();
    	pw.close();
    }
    public static void soln()
    {
	int n=nextInt();
	int k=nextInt();
	int a[]=nextIntArray(n);
	HashSet<Integer> set=new HashSet<Integer>();
	for(int i=0;i<n;i++)
		set.add(a[i]);
	int size=k;
	int l=0;
	int r=-1;
	int max=0;
	int count=0;
	int fr[]=new int[1000001];
	int last=0;
	int startindex=1;
	int endindex=k;
	for(int i=0;i<n;i++)
	{
		if(fr[a[i]]==0)
		{
			count++;
			
		}
		fr[a[i]]++;
		if(count<=k)
		{
			if(i-last>max)
			{
				//System.out.println("x");
				max=i-last;
				startindex=last+1;
				endindex=i+1;
				
			}
		}
		else
		{
			while(true)
			{
				if(last>=n)
					break;
				fr[a[last]]--;
				if(fr[a[last]]==0)
				{
					//System.out.println(last);
					last++;
					
					count--;
					break;
				}
				last++;
			}
		}
		
	}
	System.out.println(startindex+" "+endindex);

    
}
    
 
 
//System.out.println();
 
    
    
 
public static void InputReader(InputStream stream1) {
	stream = stream1;
}
 
private static boolean isWhitespace(int c) {
	return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
}
 
private static boolean isEndOfLine(int c) {
	return c == '\n' || c == '\r' || c == -1;
}
 
private static int read() {
	if (numChars == -1)
		throw new InputMismatchException();
	if (curChar >= numChars) {
		curChar = 0;
		try {
			numChars = stream.read(buf);
		} catch (IOException e) {
			throw new InputMismatchException();
		}
		if (numChars <= 0)
			return -1;
	}
	return buf[curChar++];
}
 
private static int nextInt() {
	int c = read();
	while (isSpaceChar(c))
		c = read();
	int sgn = 1;
	if (c == '-') {
		sgn = -1;
		c = read();
	}
	int res = 0;
	do {
		if (c < '0' || c > '9')
			throw new InputMismatchException();
		res *= 10;
		res += c - '0';
		c = read();
	} while (!isSpaceChar(c));
	return res * sgn;
}
 
private static long nextLong() {
	int c = read();
	while (isSpaceChar(c))
		c = read();
	int sgn = 1;
	if (c == '-') {
		sgn = -1;
		c = read();
	}
	long res = 0;
	do {
		if (c < '0' || c > '9')
			throw new InputMismatchException();
		res *= 10;
		res += c - '0';
		c = read();
	} while (!isSpaceChar(c));
	return res * sgn;
}
 
private static String nextToken() {
	int c = read();
	while (isSpaceChar(c))
		c = read();
	StringBuilder res = new StringBuilder();
	do {
		res.appendCodePoint(c);
		c = read();
	} while (!isSpaceChar(c));
	return res.toString();
}
 
private static String nextLine() {
	int c = read();
	while (isSpaceChar(c))
		c = read();
	StringBuilder res = new StringBuilder();
	do {
		res.appendCodePoint(c);
		c = read();
	} while (!isEndOfLine(c));
	return res.toString();
}
 
private static int[] nextIntArray(int n) {
	int[] arr = new int[n];
	for (int i = 0; i < n; i++) {
		arr[i] = nextInt();
	}
	return arr;
}
  
private static long[] nextLongArray(int n) {
	long[] arr = new long[n];
	for (int i = 0; i < n; i++) {
		arr[i] = nextLong();
	}
	return arr;
}
 
private static void pArray(int[] arr){
	for (int i=0; i<arr.length; i++) {
		System.out.print(arr[i] + " ");
	}
	System.out.println();
	return;
}
 
private static void pArray(long[] arr){
	for (int i=0; i<arr.length; i++) {
		System.out.print(arr[i] + " ");
	}
	System.out.println();
	return;		
}
 
private static boolean isSpaceChar(int c) {
	if (filter != null)
		return filter.isSpaceChar(c);
	return isWhitespace(c);
}
 
private interface SpaceCharFilter {
	public boolean isSpaceChar(int ch);
}
 
}