#include <bits/stdc++.h>
using namespace std;
long long int ll_max(long long int a, long long int b, long long int c) {
  return max(a, max(b, c));
}
int int_max(int a, int b, int c) { return max(a, max(b, c)); }
long long int ll_min(long long int a, long long int b, long long int c) {
  return min(a, min(b, c));
}
int int_min(int a, int b, int c) { return min(a, min(b, c)); }
long long int max(int a, long long int b) { return max((long long int)a, b); }
long long int min(int a, long long int b) { return min((long long int)a, b); }
long long int min(long long int a, int b) { return min(a, (long long int)b); }
long long int max(long long int a, int b) { return max(a, (long long int)b); }
long long int maximum(long long int a[], long long int n) {
  long long int max1 = LLONG_MIN;
  for (long long int i = 0; i < n; i++) {
    max1 = max(max1, a[i]);
  }
  return max1;
}
long long int minimum(long long int a[], long long int n) {
  long long int min1 = LLONG_MAX;
  for (long long int i = 0; i < n; i++) {
    min1 = min(min1, a[i]);
  }
  return min1;
}
long long int power(long long int x, long long int y, long long int m) {
  if (y == 0) return 1;
  long long int a = power(x, y / 2, m);
  if (y % 2) {
    return (a * ((a * x) % m)) % m;
  } else {
    return (a * a) % m;
  }
}
long long int mod_inverse(long long int x, long long int m) {
  return power(x, m - 2, m);
}
long long int fact(long long int n, long long int m) {
  if (n <= 1) return 1;
  return (fact(n - 1, m) * n) % m;
}
long long int ncr(long long int n, long long int r, long long int m) {
  if (r > n) return 0;
  long long int n1 = 1, d1 = 1, d2 = 1;
  n1 = fact(n, m);
  d1 = fact(r, m);
  d2 = fact(n - r, m);
  long long int ans = mod_inverse((d1 * d2) % m, m);
  ans = (ans * n1) % m;
  return ans;
}
long long int gcd(long long int a, long long int b) {
  if (a == 0 || b == 0) return max(a, b);
  if (a < b) return gcd(b, a);
  if (a % b == 0) return b;
  return gcd(b, a % b);
}
long long int ispal(string s) {
  long long int len = s.size();
  long long int flag = 1;
  for (long long int i = 0; i < len; ++i) {
    if (s[i] != s[len - i - 1]) {
      flag = 0;
      break;
    }
  }
  return flag;
}
long long int sroot(long long int n, long long int low = 1,
                    long long int high = 1e9 + 1) {
  if (low == high) return low;
  if (low == high - 1) {
    if (high * high <= n)
      return high;
    else
      return low;
  }
  long long int mid = (low + high) / 2;
  long long int a = mid * mid;
  if (a > n)
    return sroot(n, low, mid - 1);
  else
    return sroot(n, mid, high);
}
long long int croot(long long int n, long long int low = 1,
                    long long int high = 1e6 + 1) {
  if (low == high) return low;
  if (low == high - 1) {
    if (high * high * high <= n)
      return high;
    else
      return low;
  }
  long long int mid = (low + high) / 2;
  long long int a = mid * mid * mid;
  if (a > n)
    return croot(n, low, mid - 1);
  else
    return croot(n, mid, high);
}
unsigned long long int catalan(unsigned long long int n) {
  if (n <= 1) return 1;
  unsigned long long int ans = 0;
  for (int i = 0; i < n; i++) {
    ans += catalan(i) * catalan(n - i - 1);
  }
  return ans;
}
bool sortbysec(const pair<long long int, long long int> &a,
               const pair<long long int, long long int> &b) {
  return (a.second < b.second);
}
class solver {
 public:
  void solve() {
    long long int n, k;
    cin >> n >> k;
    string str;
    cin >> str;
    long long int ans = 0, ind = -1;
    vector<pair<int, int>> v;
    long long int f = -1, l = -1;
    for (long long int i = 0; i < n; i++) {
      if (str[i] == 'W') {
        if (f == -1) f = i;
        ind = i;
        long long int p = 0;
        l = i;
        while (i + 1 < n && str[i + 1] != 'W') i++, p++;
        if (p > 0 && i + 1 < n && str[i + 1] == 'W') v.push_back({p, ind});
      }
    }
    sort(v.begin(), v.end());
    if (ind == -1) {
      for (long long int i = 0; i < k; i++) str[i] = 'W';
    } else {
      for (long long int i = 0; i < v.size(); i++) {
        if (k >= v[i].first) {
          k -= v[i].first;
          for (long long int j = v[i].second + 1; j <= v[i].second + v[i].first;
               j++)
            str[j] = 'W';
        } else {
          for (long long int j = v[i].second + 1; j <= v[i].second + v[i].first;
               j++) {
            if (k == 0) break;
            if (str[j] == 'L') {
              str[j] = 'W';
              k--;
            }
          }
          k = 0;
          break;
        }
      }
      for (long long int i = l + 1; i < n; i++) {
        if (k == 0) break;
        if (str[i] == 'L') str[i] = 'W', k--;
      }
      for (long long int i = f - 1; i >= 0; i--) {
        if (k == 0) break;
        if (str[i] == 'L') str[i] = 'W', k--;
      }
    }
    for (long long int i = 0; i < n; i++) {
      long long int c = 0;
      if (str[i] == 'W') {
        c = 1;
        if (i - 1 >= 0 && str[i - 1] == 'W') c++;
        ans += c;
      }
    }
    cout << ans << "\n";
  }
};
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(NULL);
  std::cout.tie(NULL);
  int test = 1, c = 1;
  cin >> test;
  while (test--) {
    solver o;
    o.solve();
  }
}
