//0
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#pragma GCC optimize ("Ofast")
inline bool eksi(int n, int k, string str)
{
int j = 0, o = 0, i = 0;
int l = 0;
while (l < n && j != k)
{
if (str[l] == 'J')
++j;
++l;
}
while (l < n && o != k)
{
if (str[l] == 'O')
++o;
++l;
}
while (l < n && i != k)
{
if (str[l] == 'I')
++i;
++l;
}
if (j+o+i != k*3)
{
cout<<-1<<endl;
return 1;
}
return 0;
}
inline int mini(int n, int k, string str)
{
int j = 0, o = 0, i = 0;
int l = 0;
while (j != k)
{
if (str[l] == 'J')
++j;
++l;
}
while (o != k)
{
if (str[l] == 'O')
++o;
++l;
}
while (i != k)
{
if (str[l] == 'I')
++i;
++l;
}
//
//cout<<"l i "<<l<<endl;
int x = l;
i = 0;
o = 0;
j = 0;
while (i != k)
{
if (str[l] == 'I')
++i;
--l;
}
while (o != k)
{
if (str[l] == 'O')
++o;
--l;
}
while (j != k)
{
if (str[l] == 'J')
++j;
--l;
}
//cout<<"l i "<<l<<endl;
return x - l - 1;
}
inline int maxj(int n, int k, string str)
{
int j = 0, o = 0, i = 0;
int l = n-1;
while (i != k)
{
if (str[l] == 'I')
++i;
--l;
}
while (o != k)
{
if (str[l] == 'O')
++o;
--l;
}
while (j != k)
{
if (str[l] == 'J')
++j;
--l;
}
//
//cout<<"l j "<<l<<endl;
int x = l;
i = 0;
o = 0;
j = 0;
while (j != k)
{
if (str[l] == 'J')
++j;
++l;
}
while (o != k)
{
if (str[l] == 'O')
++o;
++l;
}
while (i != k)
{
if (str[l] == 'I')
++i;
++l;
}
//cout<<"l j "<<l<<endl;
return l - x - 1;
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n,k;
string str;
cin>>n>>k>>str;
if (eksi(n,k,str)) return 0;
int mni = mini(n,k,str);
int mxj = maxj(n,k,str);
int mnn = min(mni,mxj);
mnn -= k*3;
cout<<mnn<<endl;
return 0;
}