#include <bits/stdc++.h>
using namespace std;
const int limite = 10000;
string t;
string sol;
map<char, int> m;
bool alguien() {
  for (map<char, int>::iterator it = m.begin(); it != m.end(); it++)
    if (it->second) return true;
  return false;
}
void completar(int is) {
  for (map<char, int>::iterator it = m.begin(); it != m.end(); it++) {
    while (it->second) {
      sol[is++] = it->first;
      (it->second)--;
    }
  }
}
bool sepuede(int is) {
  if (is == int(t.size())) {
    if (alguien()) {
      completar(is);
      return true;
    }
    return false;
  }
  if (m[t[is]]) {
    m[t[is]]--;
    sol[is] = t[is];
    if (sepuede(is + 1)) return true;
    m[t[is]]++;
  }
  map<char, int>::iterator it = m.begin();
  while (it != m.end() and not((it->second) > 0 and (it->first) > t[is])) it++;
  if (it != m.end()) {
    (it->second)--;
    sol[is] = it->first;
    completar(is + 1);
    return true;
  }
  return false;
}
int main() {
  string s;
  cin >> s >> t;
  sol = s;
  for (int i = 0; i < int(s.size()); i++) m[s[i]]++;
  if (sepuede(0)) {
    cout << sol << endl;
  } else
    cout << -1 << endl;
}
