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 Java8 (OpenJDK 1.8.0) (judge verdict: Time Limit Exceeded)

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		try(Scanner sc = new Scanner(System.in)) {

			int n = sc.nextInt();
			int k = sc.nextInt();
			
			String inputStr = sc.next();

			int[] s = new int[n];
			for(int i = 0 ; i < n ; i++ ) {
				s[i] = (inputStr.charAt(i) == 76 ? -1 : 1);
			}
			
			while (k > 0 ) {
//				System.out.println("k = " + k);
				//find diff point from left
				int diffLeft = -1;
				for(int i = 0 ; i < n - 1 ; i++ ) {
					if ( s[i] != s[i+1] ) {
						diffLeft = i;
						break;
					}
				}
//				System.out.println("diff = " + diffLeft);
				//no diff point
				if ( diffLeft == -1 ) break;
				
				boolean isExchange = false;
				for(int i = n - 1 ; i > diffLeft + 1; i-- ) {
					if ( s[i] != s[i-1] && s[i] == s[diffLeft]) {
//						System.out.println(s[i-1] + "," + s[i] +  ":" + i);
//						}
						turnArray(s, diffLeft+1, i-1);
						
						isExchange = true;
						break;
					}
				}
				
				if ( !isExchange ) {
					turnArray(s, diffLeft+1, n-1);
				}

				k--;
			}
			
			//count happiness
//			Arrays.stream(s).forEach(p -> System.out.println(p));
			int happiness = 0;
			
			for(int i = 1 ; i < n ; i++ ) {
				if ( s[i] == -1 && s[i-1] == -1) {
					happiness++;
				}
				if ( s[i-1] == 1 && s[i] == 1) {
					happiness++;
				}
			}
			
			System.out.println(happiness);
		}
	}
	private static void turnArray(int[] s, int beginIndex, int endIndex) {
		for(int i = beginIndex ; i < (endIndex + beginIndex) / 2 + 1; i++ ) {
			int tmp = s[i];
			s[i] = - s[endIndex - (i - beginIndex)];
			s[endIndex - (i - beginIndex)] = - tmp;
		}
	}
}