#include <bits/stdc++.h>
#define forn(i,n) for(int i=0;i<int(n);++i)
#define fort(i,n) for(int i=0;i<=int(n);++i)
#define fori(i,a,n) for(int i=a;i<int(n);++i)
#define forit(i,a,n) for(int i=a;i<=int(n);++i)
#define ALL(v) v.begin(),v.end()
#define SZ(v) (int)v.size()
#define DBG(a) cerr<<#a<<" = "<<(a)<<endl
#define DBGA(a) cerr<<#a<<" = "<<(a)<<", ";
#define DBG2(a,b) do{DBGA(a)DBG(b);}while(0)
#define DBG3(a,b,c) do{DBGA(a)DBGA(b)DBG(c);}while(0)
#define DBG4(a,b,c,d) do{DBGA(a)DBGA(b)DBGA(c)DBG(d);}while(0)
#define LINE cerr<<"===================================="<<endl
using namespace std;
template<typename T>
ostream &operator<<(ostream &os, const vector<T> &v){
os<<"[";
forn(i,v.size()){
if(i) os<<" ";
os<<v[i];
}
os<<"]";
return os;
}
typedef long long ll;
typedef long double ld;
int get(string &s, int k, char c){
int ret = 0;
bool add = 0;
while(SZ(s) && k){
if(s.back() != c){
ret += add;
} else{
add = 1;
--k;
}
s.pop_back();
}
if(k > 0) ret = -1;
return ret;
}
void solve(){
int n, k;
string s;
cin>>n>>k>>s;
int x = get(s, k, 'I');
if(x == -1){
cout<<"-1\n";
return;
}
reverse(ALL(s));
int y = get(s, k, 'J');
if(y == -1){
cout<<"-1\n";
return;
}
int z = 0;
forn(i,SZ(s)){
if(s[i] != 'O' || k == 0){
++z;
} else if(s[i] == 'O'){
--k;
}
}
int ans = x+y+z;
if(k) ans = -1;
cout<<ans<<"\n";
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
#ifdef LOCAL
assert(freopen("input.in", "r", stdin));
//~ freopen("output.out", "w", stdout);
#endif
#ifdef LOCAL
int tcs; cin>>tcs;
while(tcs--)
#endif
solve();
return 0;
}