Problem

There is a string $ S $ of length $ N $. All characters in $ S $ are numbers between 0 and 9.
When you make a sequence of $ \ frac {N \ times (N + 1)} {2} $, which is the number of terms created by enumerating all the numbers created from all the substrings of $ S $, Find the smallest value in $ H $.

Constraints

The input satisfies the following conditions.

* $ 1 \ leq N \ leq 10 ^ 5 $
* $ 1 \ leq H \ leq \ frac {N \ times (N + 1)} {2} $
* $ | S | = N $
* All characters in $ S $ are 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Input

The input is given in the following format.


$ N $ $ H $
$ S $


All inputs are given as integers.
$ N $ and $ H $ are given on the first line, separated by blanks.
The second line is given the string $ S $ of length $ N $.

Output

Output the $ H $ th value on one line.
(Do not include extra 0s at the beginning of the output.)

Examples

Input

2 3
00


Output

0


Input

4 9
0012


Output

12


Input

5 13
10031


Output

100
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> P;

#define fi first
#define se second
#define repl(i,a,b) for(ll i=(ll)(a);i<(ll)(b);i++)
#define rep(i,n) repl(i,0,n)
#define all(x) (x).begin(),(x).end()
#define dbg(x) cout<<#x"="<<x<<endl
#define mmax(x,y) (x>y?x:y)
#define mmin(x,y) (x<y?x:y)
#define maxch(x,y) x=mmax(x,y)
#define minch(x,y) x=mmin(x,y)
#define uni(x) x.erase(unique(all(x)),x.end())
#define exist(x,y) (find(all(x),y)!=x.end())
#define bcnt __builtin_popcount

#define INF 1e16
#define mod 1000000007

int _n,_k;
int ranks[101010];
int tmp[101010];

bool compare_sa(int i,int j){
  if(ranks[i]!=ranks[j])return ranks[i]<ranks[j];
  else{
    int ri=i+_k<=_n?ranks[i+_k]:-1;
    int rj=j+_k<=_n?ranks[j+_k]:-1;
    return ri<rj;
  }
}
void construct_sa(string s,int *sa){
  _n=s.length();
  for(int i=0;i<=_n;i++){
    sa[i]=i;
    ranks[i]=i<_n?s[i]:-1;
  }
  for(_k=1;_k<=_n;_k*=2){
    sort(sa,sa+_n+1,compare_sa);
    tmp[sa[0]]=0;
    for(int i=1;i<=_n;i++){
      tmp[sa[i]]=tmp[sa[i-1]]+(compare_sa(sa[i-1],sa[i])?1:0);
    }
    for(int i=0;i<=_n;i++){
      ranks[i]=tmp[i];
    }
  }
}

ll n,h;
string s;
ll cnt[101010];
int sa[101010];
ll sum[101010];

int main(){
  cin>>n>>h>>s;
  for(ll i=0;i<n;){
    if(s[i]!='0'){
      sum[i]++;
      ll suf=n-i;
      cnt[1]++;
      cnt[suf+1]--;
      i++;
      continue;
    }
    ll j;
    for(j=i;j<n&&s[j]=='0';j++);
    ll len=j-i;
    ll suf=n-j;
    sum[j]+=len;
    cnt[0]+=len*(len+1)/2;
    cnt[1]+=len;
    cnt[suf+1]-=len;
    i=j;
  }

  for(ll i=1;i<100001;i++)cnt[i+1]+=cnt[i];

  construct_sa(s,sa);

  if(h<=cnt[0]){
    cout<<0<<endl;
  }else{
    h-=cnt[0];
    ll d=-1;
    repl(i,1,n+1){
      if(h<=cnt[i]){
        d=i;
        break;
      }else h-=cnt[i];
    }
    repl(i,1,n+1){
      if(n-sa[i]>=d&&s[sa[i]]!='0'){
        if(h<=sum[sa[i]]){
          cout<<s.substr(sa[i],d)<<endl;
          return 0;
        }else h-=sum[sa[i]];
      }
    }
  }

  return 0;
}

