#include <iostream>
#include <string>
using namespace std;
int vj[200005], vo[200005], vi[200005];
int main()
{
int n, k, cj = 1, co = 1, ci = 1, pj = 1, po = 1, pi = 1;
string s;
cin >> n >> k >> s;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == 'J') { vj[cj++] = i; }
if (s[i] == 'O') { vo[co++] = i; }
if (s[i] == 'I') { vi[ci++] = i; }
}
// Initialized to a value larger than any possible valid answer
int ans = n + 1;
// FIXED: Changed <= to < for cj, co, and ci
while (pj + k - 1 < cj && po + k - 1 < co && pi + k - 1 < ci)
{
// Advance 'O' pointer
while (po + k - 1 < co && vo[po] <= vj[pj + k - 1])
{
po++;
}
// Advance 'I' pointer
if (po + k - 1 < co)
{
while (pi + k - 1 < ci && vi[pi] <= vo[po + k - 1])
{
pi++;
}
}
// Calculate min cost if valid sequences were found
if (pj + k - 1 < cj && po + k - 1 < co && pi + k - 1 < ci)
{
ans = min(ans, (vi[pi + k - 1] - vj[pj] + 1) - 3 * k);
}
pj++; // Slide the window forward
}
// Output result
if (ans == n + 1)
{
cout << -1;
}
else
{
cout << ans;
}
return 0;
}