#include <bits/stdc++.h>
using namespace std;
string a, b;
int la, lb;
long long ans;
int num[10];
int flag1;
void find(string a, int la) {
  memset(num, 0, sizeof(num));
  for (int i = 0; i < la; i++) {
    int te = a[i] - '0';
    num[te]++;
  }
}
bool cmp(char a, char b) { return a > b; }
void dfs(long long nu, int kk, int t) {
  if (flag1) return;
  if (kk == la) {
    ans = nu;
    flag1 = 1;
    return;
  }
  if (t == 1) {
    for (int i = 9; i >= 0; i--) {
      if (num[i]) {
        long long t = nu * 10;
        t += i;
        num[i]--;
        dfs(t, kk + 1, 1);
        num[i]++;
      }
    }
  } else {
    int m = b[kk] - '0', j;
    for (j = m; j >= 0; j--) {
      if (num[j]) {
        long long t = nu * 10;
        t += j;
        num[j]--;
        if (j != m)
          dfs(t, kk + 1, 1);
        else
          dfs(t, kk + 1, 0);
        num[j]++;
      }
    }
  }
  return;
}
int main() {
  cin >> a >> b;
  la = a.length();
  lb = b.length();
  find(a, la);
  if (lb > la) {
    sort(a.begin(), a.end(), cmp);
    cout << a;
    return 0;
  } else {
    flag1 = 0;
    dfs(0, 0, 0);
  }
  cout << ans;
  return 0;
}
