#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt")
#include <bits/stdc++.h>
using namespace std;
#define _f(i, a, b) for (int i = a; i <= b; ++i)
#define _d(i, a, b) for (int i = a; i >= b; --i)
using pii = pair<int, int>;
using ll = long long;
#define fi first
#define se second
static constexpr int N = 2e5 + 5;
long long a, b, c;
int h[20];
int cnt[15], l1, l2;
void solve() {
cin >> a >> b, c = b;
while(a) cnt[a % 10ll]++, a /= 10ll, l1++;
while(c) c /= 10ll, l2++;
c = b;
_f(i, 1, l2) h[l2 - i + 1ll] = c % 10ll, c /= 10ll;
if(l1 < l2) {
_d(i, 9, 0) _f(j, 1, cnt[i]) cout << i;
return ;
}
else {
bool flg = 1;
_f(i, 1, l1) {
if(flg) {
_d(j, 9, 0) {
if(j > h[i] || !cnt[j]) continue;
if(j == h[i]) {
int is_smaller = -1;
cnt[j]--;
int pos = i + 1;
_f(t, 0, 9) {
_f(k, 1, cnt[t]) {
if(t < h[pos]) {
is_smaller = 1;
break;
}
if(t > h[pos]) {
is_smaller = 0;
break;
}
++pos;
}
if(is_smaller != -1) break;
}
cnt[j]++;
if(is_smaller != 0) {
cout << j, cnt[j]--;
break;
}
else continue;
}
if(j < h[i]) {
flg = 0;
cout << j, cnt[j]--;
break;
}
}
}
if(!flg) break;
}
_d(i, 9, 0) _f(j, 1, cnt[i]) cout << i;
}
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
solve();
return 0;
}
