#include<iostream>
#include<map>
#include<vector>
using namespace std;
const int N = 505, INF = 0x7fffffff;
int n, k, ary[N], sum[N];
vector<int>checkpoint;
map<pair<int, pair<int, int>>, int>mp;
pair<int, pair<int, int>>mkp(int a, int b, int c) { return make_pair(a, make_pair(b, c)); }
int dfs(int pos, int lk, int prelk)
{
if (mp[mkp(pos, lk, prelk)])return mp[mkp(pos, lk, prelk)];
if (pos == n)return mp[mkp(pos, lk, prelk)] = (sum[pos] - sum[prelk]);
int res = INF;
if (lk > 0)res = min(res, max(dfs(pos + 1, lk - 1, pos), sum[pos] - sum[prelk]));
res = min(res, dfs(pos + 1, lk, prelk));
return mp[mkp(pos, lk, prelk)] = res;
}
void getzt(int pos, int lk, int prelk)
{
if (pos == n)return;
int a = dfs(pos + 1, lk - 1, pos);
int b = dfs(pos + 1, lk, prelk);
if (a <= b)
{
checkpoint.push_back(pos);
getzt(pos + 1, lk - 1, pos);
}
else getzt(pos + 1, lk, prelk);
}
int main()
{
cin >> n >> k;
k--;
for (int i = 1;i <= n;i++)cin >> ary[i];
for (int i = 1;i <= n;i++)sum[i] = sum[i - 1] + ary[i];
dfs(1, k, 0);
getzt(1, k, 0);
checkpoint.insert(checkpoint.begin(), 0);
checkpoint.push_back(n);
for (int i = 1;i < checkpoint.size();i++)cout << checkpoint[i - 1] + 1 << " " << checkpoint[i] << endl;
return 0;
}