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# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;

namespace testes
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split(' ');
            int N = int.Parse(str[0]);
            int K = int.Parse(str[1]);
            string S = Console.ReadLine();
            char[] C = new char[N];
            C = S.ToCharArray();
            /*
            while (K > 0)
            {
                int l = 0, r = 0, tmpflag = 0;
                for (int i = 0; i < N-1; i++)
                {
                    //Console.WriteLine($"i = {i}");
                    if (C[i] != C[i+1] && tmpflag == 0)
                    {
                        //Console.WriteLine("aaa");
                        tmpflag = 1;
                        l = i;
                        i++;
                        continue;
                    }
                    if(C[i] != C[i + 1] && tmpflag == 1)
                    {
                        //Console.WriteLine("bbb");
                        r = i;
                        Rotation(C, l + 1, r);
                        tmpflag = 2;
                        K = K - 1;
                        break;
                    }
                }
                if(tmpflag == 1)
                {
                    Rotation(C, l + 1, N);
                    break;
                }
                if (tmpflag == 0) break;
            }
            */
            int count = 0;
            for(int i = 0; i < N-1; i++)
            {
                if (C[i] != C[i + 1]) count++;
            }
            int ans = evaluation(C, N);
            //Console.WriteLine(ans);
            if (count / 2 >= K) ans = ans + K * 2;
            else ans = ans + count;
            // Console.WriteLine(C);
            Console.WriteLine(ans);


        }
        public static int evaluation(char[] array, int N)
        {
            int count = 0;
            for(int i = 0; i < N-1; i++)
            {
                if (array[i] == array[i + 1]) count++;
            }
            return count;
        }
        public static void Rotation(char[] array, int l, int r)
        {
            int len = r - l + 1;
            char tmp = 'L';
            if (array[l] == 'R') tmp = 'L';
            else tmp = 'R';
        //   Console.WriteLine($"{l},{r},{len}");
            for (int i = 0; i < len; i++)
            {
                array[l + i] = tmp;
            }
        }
    }

    
}

/*
int a, b, c;
a = int.Parse(Console.ReadLine()); //標準入力
string[] str = Console.ReadLine().Split(' ');//2つ以上のスペース区切り入力の取得
b = int.Parse(str[0]);  //数値で受け取りたい場合は変換する
c = int.Parse(str[1]);
string S = Console.ReadLine();
Console.Write("改行なし a = {0} b = {1} c = {2}", a, b, c)//改行なし出力
Console.WriteLine("改行あり a = {0} b = {1} c = {2}", a, b, c);//改行付き出力

string[] str = Console.ReadLine().Split(' ');
int[] a = new int[N];
for(int i = 0; i < N; i++) a[i] = int.Parse(str[i]);
 */