#include<bits/stdc++.h>
using namespace std;
const int maxN=1e6+10;
struct Node{
int l,r,mon;//左端,右端和花费
}a[maxN];
queue<int>q;
int d[maxN];//记录参观每个画师的张数
int n,m,ans,k,tot;//绘画数,画师数,参观过的画师人数,可移动右边界,答案个数
bool cmp(Node,Node);//比较函数
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++){
int x;
cin>>x;
q.push(x);
}//读入与入队
for (int i=1;i<=n;){
if (i>2){
d[q.front()]--;
if (!d[q.front()]) ans--;
q.pop();
}
while (ans<m){//不满足要求
if (!d[q.front()]) ans++;//如果队首所对画师的画未参观,ans++
d[q.front()]++;//该画师所参观画张数++
k++;//右边界移动
}
a[++tot]={i,k,k-i+1};//记录答案
while (d[q.front()]>1){//如果队首所对画家参观过的画大于1幅
d[q.front()]--;//参观画数--
i++;//左边界移动
q.pop();//出队
}
}
sort(a+1,a+tot+1,cmp);//排序
for (int i=1;i<=tot;i++) cout<<a[i].l<<' '<<a[i].r<<endl;//输出
return 0;
}
inline bool cmp(Node a,Node b){
if (a.mon!=b.mon) return a.mon<b.mon;
return a.l<b.l;
}//比较函数,先比较花费,再比较左边界
/*
12 5
2 5 3 1 3 2 4 1 1 5 4 3
*/
求助大佬……