RT
#include<bits/stdc++.h>
using namespace std;
int n,k;
char s[100005],e[100005];
bool tp(){
for(int i=0;i<n;i++){if(i%2==0)e[i]='N';else e[i]='F';}
int f=0;
for(int i=0;i<n;i++)if(e[i]!=s[i])f++;
return (f<=k||n-f<=k);
}//对1的特判
char fz(char a){
if(a=='N')return 'F';
else return 'N';
}
bool pd(int d){
int l=1,g=0;
char y=s[0];
for(int i=1;i<n;i++){
if(s[i]==y)l++;
else {y=s[i];l=1;}
if(l>d){g++;l=1;y=fz(s[i]);}
}
return g<=k;
}
//判断思路:从头开始找连续的字符,发现连续字符超过mid就改变一个,次数g++,最后判断g是否<=k
//如果d是1的话,分两种情况,即从s【0】开始改和从s【1】开始改 ,因此直接特判即可
int main(){
cin>>n>>k>>s;
if(tp()){cout<<1;return 0;}
int l=2,r=n;
while(l<r){
int mid=(l+r)/2;
if(pd(mid))r=mid;
else l=mid+1;
}
cout<<l;
return 0;
}