#include <bits/stdc++.h>
using namespace std;
string s, t, ans;
map<char, int> mp;
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> s >> t;
  sort(s.begin(), s.end());
  for (int i = 0; i < t.size(); i++) {
    auto iter = lower_bound(s.begin(), s.end(), t[i]);
    if (iter == s.end()) {
      for (int j = ans.size() - 1; j >= 0; j--) {
        auto it = upper_bound(s.begin(), s.end(), ans[j]);
        if (it != s.end()) {
          char ch = *it;
          s.erase(it);
          s += ans.substr(j, ans.size() - j);
          ans.erase(j, ans.size() - j);
          ans += ch;
          sort(s.begin(), s.end());
          cout << ans + s << endl;
          exit(0);
        }
        s += ans[j];
        ans.erase(j, 1);
      }
      cout << -1 << endl;
      exit(0);
    }
    ans += *iter;
    s.erase(iter);
    if (ans > t) {
      ans += s;
      cout << ans << endl;
      exit(0);
    }
  }
  ans += s;
  if (ans == t) {
    string tmp;
    for (int i = ans.size() - 1; i >= 0; i--) {
      auto it = upper_bound(tmp.begin(), tmp.end(), ans[i]);
      if (it != tmp.end()) {
        char ch = *it;
        tmp.erase(it);
        tmp += ans.substr(i, ans.size() - i);
        ans.erase(i, ans.size() - i);
        ans += ch;
        sort(tmp.begin(), tmp.end());
        ans += tmp;
        break;
      }
      tmp += ans[i];
      ans.erase(i, 1);
    }
    if (ans > t)
      cout << ans << endl;
    else
      cout << -1 << endl;
  } else if (ans > t)
    cout << ans << endl;
  else
    cout << -1 << endl;
  return 0;
}
