#include<cstdio>
#include<iostream>
using namespace std;
#define ll long long
#define N 50001
struct edge{
int l,r;
}ed[N];
int n,m,cnt;
int bk[N];
int maxn,minn,nxt[N];
bool check(int x)
{
int sum=0,t=0;
for(int i=1;i<=n;i++)
{
if(t+bk[i]>=x)t=bk[i],sum++;
else t+=bk[i];
}
if(sum>=m)return 1;
else return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)scanf("%d",&bk[i]),maxn+=bk[i],nxt[i]=bk[i];
for(int i=1;i<=n;i++)nxt[i]=nxt[i]+nxt[i-1];
while(minn<maxn)
{
int mid=(maxn+minn+1)>>1;
if(check(mid))minn=mid;
else maxn=mid-1;
}
int id1,id2;
int t=0,sum=0;
ed[++cnt].r=n;
for(int i=n;i>=1;i--)
{
if(t+bk[i]>minn)t=bk[i],ed[cnt].l=i+1,ed[++cnt].r=i;
else if(t+bk[i]==minn)t=0,ed[cnt].l=i,ed[++cnt].r=i-1;
else if(t+bk[i]<minn)t+=bk[i];
}
ed[cnt].l=1;
for(int i=cnt;i>=1;i--)
{
if(ed[i].l!=0&&ed[i].r!=0)
cout<<ed[i].l<<" "<<ed[i].r<<endl;
}
return 0;
}