#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset((a),(b),sizeof((a)))
#define int long long
const int N=2e5+10;
const int M=1e6+10;
string s;
int lt[M],pos,wz2,ds;//删除了i个字符串包含的字符数量 所求元素位置 答案所在的字符串的第几个元素 需要删除元素个数
void solve(){
//输入
cin>>s>>pos;
stack<char>sk;
//字符串大小
int len=s.size();
//初始化lt数组 如字符串长度为5 那么有lt[1]=5 lt[2]=9 lt[3]=12 lt[4]=14 lt[5]=15
mem(lt,0);
for(int i=len;i>=1;i--)lt[len-i+1]=lt[len-i]+i;
//二分跑ds
ds=lower_bound(lt+1,lt+1+len,pos)-lt-1;
wz2=pos-lt[ds];
//删除ds个元素
for(const char c:s){
while(ds&&!sk.empty()&&sk.top()>c){
sk.pop();
ds--;
}
sk.push(c);
}
//得到答案所在的字符串,出答案
while(sk.size()!=wz2)sk.pop();
cout<<sk.top();
return;
}
signed main(){
ios::sync_with_stdio(0);cout.tie(0);cin.tie(0);
int t;cin>>t;while(t--)
solve();
}
using namespace std;
#define mem(a,b) memset((a),(b),sizeof((a)))
#define int long long
const int N=2e5+10;
const int M=1e6+10;
string s;
int lt[M],pos,wz2,ds;//删除了i个字符串包含的字符数量 所求元素位置 答案所在的字符串的第几个元素 需要删除元素个数
void solve(){
//输入
cin>>s>>pos;
stack<char>sk;
//字符串大小
int len=s.size();
//初始化lt数组 如字符串长度为5 那么有lt[1]=5 lt[2]=9 lt[3]=12 lt[4]=14 lt[5]=15
mem(lt,0);
for(int i=len;i>=1;i--)lt[len-i+1]=lt[len-i]+i;
//二分跑ds
ds=lower_bound(lt+1,lt+1+len,pos)-lt-1;
wz2=pos-lt[ds];
//删除ds个元素
for(const char c:s){
while(ds&&!sk.empty()&&sk.top()>c){
sk.pop();
ds--;
}
sk.push(c);
}
//得到答案所在的字符串,出答案
while(sk.size()!=wz2)sk.pop();
cout<<sk.top();
return;
}
signed main(){
ios::sync_with_stdio(0);cout.tie(0);cin.tie(0);
int t;cin>>t;while(t--)
solve();
}