func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, t;   string s;   int puc(int k, int t) {     vector<int> v(n + 1, 0);     v[n - 1] = (s[n - 1] ==  H );     for (int i = n - 2; i >= 0; --i) v[i] = v[i + 1] + (s[i] ==  H );     int nh = 0, ns = 0;     for (int i = 0; i < int(n); ++i) {       if (s[i] ==  H )         ++nh;       else if (s[i] ==  S )         ++ns;     }     if (k + ns < nh) return 0;     int zk = k;     int ret = 0;     int qui = -1, q = 0;     for (int i = 0; i < n; ++i) {       if (s[i] ==  S ) {         ++k;         --ns;       } else if (s[i] ==  H ) {         --nh;         if (k > 0)           --k;         else if (qui == -1) {           qui = i;           q = 1;         } else           ++q;       }       if (nh == 0 and k >= q) {         if (qui == -1 and ret < t) return true;         if (ret + (i - qui) < t) return true;         break;       }       ++ret;     }     k = zk;     int ult = -1;     int r = 0;     int ans = 0;     for (int i = 0; i < int(n); ++i) {       if (s[i] ==  S ) ++k;       if (k >= r and ult != -1) {         ans += i - ult;         if (v[i] > 0) ans += i - ult;         k -= r;         ult = -1;         r = 0;       }       if (s[i] ==  H ) {         if (k > 0)           --k;         else if (ult == -1) {           ult = i;           r = 1;         } else           ++r;       }       if (ult == -1 and v[i + 1] == 0) break;       ++ans;     }     return (ult == -1 and ans < t);   }   int main() {     cin >> n >> t;     cin >> s;     int lo = 0, hi = n, m;     while (hi - lo > 5) {       int m = (lo + hi) / 2;       if (puc(m, t))         hi = m;       else         lo = m;     }     bool trobat = 0;     if (puc(0, t)) {       cout << 0 << endl;       trobat = true;     }     for (int k = lo; !trobat and k <= hi; ++k) {       if (puc(k, t)) {         cout << k << endl;         trobat = true;       }     }     if (!trobat) cout << -1 << endl;   }   