#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
int wys[26];
int twys[26];
int n, m;
string s, t;
char res[N];
bool proba(int tyle) {
  int dl = 0;
  for (int i = 0; i < (26); ++i) twys[i] = wys[i];
  for (int i = 0; i < (tyle); ++i) {
    if (twys[t[i] - 'a'] == 0) return false;
    res[++dl] = t[i];
    twys[t[i] - 'a']--;
  }
  int potrz;
  if (tyle < m)
    potrz = t[tyle] - 'a' + 1;
  else
    potrz = 0;
  while (potrz < 26 && twys[potrz] == 0) {
    potrz++;
  }
  if (potrz == 26) return false;
  res[++dl] = (potrz + 'a');
  twys[potrz]--;
  int wsk = 0;
  while (wsk < 26) {
    while (twys[wsk] > 0) {
      res[++dl] = (wsk + 'a');
      twys[wsk]--;
    }
    wsk++;
  }
  res[dl + 1] = '\0';
  return true;
}
bool p2(int tyle) {
  int dl = 0;
  for (int i = 0; i < (26); ++i) twys[i] = wys[i];
  for (int i = 0; i < (tyle); ++i) {
    if (twys[t[i] - 'a'] == 0) return false;
    res[++dl] = t[i];
    twys[t[i] - 'a']--;
  }
  int wsk = 0;
  while (wsk < 26) {
    while (twys[wsk] > 0) {
      res[++dl] = (wsk + 'a');
      twys[wsk]--;
    }
    wsk++;
  }
  res[dl + 1] = '\0';
  return true;
}
string wzor() {
  for (int i = 0; i < (n); ++i) wys[s[i] - 'a']++;
  int maxTS = min(m, n - 1);
  for (int i = maxTS; i >= (0); --i) {
    if (proba(i)) {
      string odp = s;
      for (int j = 1; j <= (n); ++j) odp[j - 1] = res[j];
      return odp;
    }
  }
  if (n > m)
    if (p2(m)) {
      string odp = s;
      for (int j = 1; j <= (n); ++j) odp[j - 1] = res[j];
      return odp;
    }
  return "-1";
}
string brut() {
  string pom = s;
  sort(pom.begin(), pom.end());
  do {
    if (pom > t) {
      return pom;
    }
  } while (next_permutation(pom.begin(), pom.end()));
  return "-1";
}
int main() {
  cin >> s >> t;
  n = (int)s.size(), m = (int)t.size();
  cout << wzor() << endl;
}
