#include <bits/stdc++.h>   using namespace std;   struct node {     int len, l, r;     bool operator<(const node &a) const { return len > a.len; }   };   int day[200010];   int m[200010];   int main() {     int n, k, c, i, j;     scanf( %d %d , &n, &k);     c = 0;     for (i = 0; i < n; i++) {       scanf( %d , &day[i]);       if (day[i] < 0) c++;     }     if (c > k) {       printf( -1 n );       return 0;     }     int turn = 0;     bool f = 0;     priority_queue<node> q;     for (i = 0; i < n; i++) {       if (day[i] < 0) {         m[i] = 1;         k--;       }       if (!f && day[i] < 0) {         turn++;         f = 1;       }       if (f && day[i] >= 0) {         turn++;         f = 0;       }     }     int l = 0, r = 0;     i = 0;     while (m[i] == 0 && i < n) i++;     for (; i < n; i++) {       if (m[i] == 0) {         l = i;         while (m[i] == 0 && i < n) i++;         r = i - 1;         node tp;         tp.l = l, tp.r = r;         tp.len = r - l + 1;         q.push(tp);         i = i - 1;       }     }     int tt = turn, kk = k;     while (!q.empty()) {       node x = q.top();       q.pop();       if (k < x.len && kk < x.len)         break;       else {         if (k >= x.len) {           k -= x.len;           if (x.r != n - 1) {             turn -= 2;           } else             turn--;         }         if (kk >= x.len) {           if (x.r != n - 1) {             kk -= x.len;             tt -= 2;           }         }       }     }     printf( %d n , min(turn, tt));   }   