Problem:
Score : 400 points

Problem Statement

There are N people standing in a queue from west to east.

Given is a string S of length N representing the directions of the people.
The i-th person from the west is facing west if the i-th character of S is L, and east if that character of S is R.

A person is happy if the person in front of him/her is facing the same direction.
If no person is standing in front of a person, however, he/she is not happy.

You can perform the following operation any number of times between 0 and K (inclusive):

Operation: Choose integers l and r such that 1 \leq l \leq r \leq N, and rotate by 180 degrees the part of the queue: the l-th, (l+1)-th, ..., r-th persons. That is, for each i = 0, 1, ..., r-l, the (l + i)-th person from the west will stand the (r - i)-th from the west after the operation, facing east if he/she is facing west now, and vice versa.

What is the maximum possible number of happy people you can have?

Constraints

N is an integer satisfying 1 \leq N \leq 10^5.

K is an integer satisfying 1 \leq K \leq 10^5.

|S| = N

Each character of S is L or R.

Input

Input is given from Standard Input in the following format:

N K
S

Output

Print the maximum possible number of happy people after at most K operations.

Sample Input 1

6 1
LRLRRL

Sample Output 1

3

If we choose (l, r) = (2, 5), we have LLLRLL, where the 2-nd, 3-rd, and 6-th persons from the west are happy.

Sample Input 2

13 3
LRRLRLRRLRLLR

Sample Output 2

9

Sample Input 3

10 1
LLLLLRRRRR

Sample Output 3

9

Sample Input 4

9 2
RRRLRLRLL

Sample Output 4

7

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
#define FOR(i, begin, end) for(int i=(begin),i##_end_=(end);i<i##_end_;i++)
#define RFOR(i, begin, end) for(int i=(end)-1, i##_begin_=(begin);i>=i##_begin_;i--)
#define rep(i, N) FOR(i, 0, N)
#define rrep(i, N) RFOR(i, 0, N)
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define sz(x) ((int)(x).size())
#define pb push_back
#define mp make_pair
using namespace std;
using ll = long long int;
using V = vector<ll>;
using P = pair<ll, ll>;
struct fast_ios { fast_ios(){ cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(20); }; } fast_ios_;
constexpr int mod = 1e9+7;
ll gcd(ll a, ll b) { return b? gcd(b, a%b) : a;}
ll lcm(ll a, ll b) { return a/gcd(a, b)*b;}

ll n, k;
string s;

int main() {
    cin >> n >> k >> s;
    V r(n), l(n);
    rep(i, n) {
        if (s[i] == 'R') {
            r[i] = 1;
            l[i] = 0;
        }
        else {
            r[i] = 0;
            l[i] = 1;
        }
    }

    bool origin = false;
    bool ok = true;
    rep(i, n) if(r[i] == 0) ok = false;
    if(ok) origin = true;
    ok = true;
    rep(i, n) if(l[i] == 0) ok = false;
    if(ok) origin = true;
    
    V cr, cl;
    ll cnt = 0;
    rep(i, n) {
        if(r[i]) cnt++;
        else {
            if (cnt) cr.pb(cnt);
            cnt = 0;
        }
    }
    if(cnt) cr.pb(cnt);

    cnt = 0;
    rep(i, n) {
        if(l[i]) cnt++;
        else {
            if(cnt) cl.pb(cnt);
            cnt = 0;
        }
    }
    if(cnt) cl.pb(cnt);

    sort(rall(cr));
    sort(rall(cl));

    ll ret = 0;
    rep(i, k) {
        if(i+1 <= cr.size()) ret += cr[i];
        if(i+1 <= cl.size()) ret += cl[i];
    }

    if (origin) ret = n;
    else if (cr.size() == 1 && cr[0] % 2 == 0) ret = n;
    else if(cl.size() == 1 && cr.size() % 2 == 0) ret = n;
    else if (!origin) ret = min(ret, n-1);

    cout << ret << endl;
    return 0;
}