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)

#pragma GCC optimize ("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#include <bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	uint32_t n, k, i, RL = 0, happy = 0;
	cin >> n >> k;

	char c;
	bool s[n]; // L のとき true
	for (i = 0; i < n; ++i) {
		cin >> c;
		s[i] = (c == 'L');
	}

	bool start_L = false, end_R = false, unhappy;
	//, unhappy_next = false; // 不幸な時 true
	for (i = 0; i < n; ++i) {
		unhappy = false;
		if (i == 0) {
			start_L = s[0]; // L のとき不幸
			if (start_L) {
				unhappy = true;
			}
		} else if (i == n - 1) {
			end_R = !s[n - 1]; // R のとき不幸
			if (end_R) {
				unhappy = true;
			}
		}
		if (i < n - 1 && !s[i] && s[i + 1]) { // RL の R
			RL++;
			unhappy = true;
			//unhappy_next = true;
		} else if (i > 0 && !s[i - 1] && s[i]) { // RL の L
			unhappy = true;
		} else {
			//unhappy_next = false;
		}
		if (!unhappy) { // 不幸でないと確定
			happy++;
		}
	}
//	cerr << happy << endl;
//	cerr << RL << endl;
//	cerr << start_L << endl;
//	cerr << end_R << endl;

	if (RL <= k) { // RL 回だけ RL の出現を減らせる
		k -= RL;
		happy += RL * 2; // RL * 2
	} else {
		happy += k * 2; // k * 2
		k = 0;
	}
	if ((start_L && end_R) && k > 0) {
		k--;
		happy++;
	}

	cout << happy << endl;
	return 0;
}