#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;
    while(t--){
        int n, k;
        cin >> n >> k;
        string s;
        cin >> s;
        vector<int> a(n);
        int maxA = 0;
        for (int i = 0; i < n; i++){
            cin >> a[i];
            maxA = max(maxA, a[i]);
        }
        
        auto canAchieve = [&](int X) -> bool {
            int ops = 0;
            for (int i = 0; i < n; ){
                if(a[i] > X && s[i] == 'R'){
                    i++;
                    continue;
                }
                bool needBlue = false;
                int j = i;
                while(j < n && !(a[j] > X && s[j]=='R')){
                    if(a[j] > X && s[j]=='B') needBlue = true;
                    j++;
                }
                if(needBlue) ops++;
                i = j;
            }
            return ops <= k;
        };
        
        int lo = 0, hi = maxA, ans = maxA;
        while(lo <= hi){
            int mid = lo + (hi - lo) / 2;
            if(canAchieve(mid)){
                ans = mid;
                hi = mid - 1;
            } else {
                lo = mid + 1;
            }
        }
        
        cout << ans << "\n";
    }
    return 0;
}