import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); long k = sc.nextLong(); sc.nextLine(); String s = sc.nextLine(); //每个1前面有几个0,就能个这个1组成多少对01子序列 //使用l和r两个位置,先将r一直向右移动,一旦[l,r]中01序列数量超过了k,就将l右移。 int l = 0, r = 0; int cnt0 = 0, cnt1 = 0; //分别记录区间[l,r]中0和1的个数 //TODO 为了下方先进行r++,这里先处理0这个位置 if (s.charAt(0) == '0')cnt0++; if (s.charAt(0) == '1')cnt1++; long cnt = 0; //记录区间[l,r]中01子序列的个数 while (l < n && r < n) { if (cnt == k) { System.out.println((l + 1) + " " + (r + 1)); return; } if (cnt < k) { //如果子序列个数小于k,需要右端点右移 //TODO 这里右端点一定要先考虑右移 r++;//右端点右移 if (r >= n) { // 添加越界判断 break; } //若右端点是1,加进来后,前面所有的0都可以和这个1组成01子序列,所有总个数+cnt0 if (s.charAt(r) == '1') { cnt1++; cnt += cnt0; } else { //如果右端点是0,加进来后,对答案毫无影响,只要cnt0加1 cnt0++; } //TODO 如果右端点在这里右移,会导致可能cnt+=cnt0后已经大于k了,但是这里还是r++ } else { //如果子序列个数大于k,需要左端点右移 //若左端点是1,排出序列后,对答案毫无影响,但是cnt1需要减1 if (s.charAt(l) == '1') { cnt1--; } else { //若左端点是0,排出去后,后面的所有1的结果都减少了1个,所有01子序列总个数-cnt1 cnt0--; cnt -= cnt1; } //TODO 这里要后进行l++,如果一开始就l++,讨论的就不是真正的左端点了 l++;//左端点右移 } } //如果没有找到01子序列个数等于k的情况,输出-1 System.out.println(-1); } }