#include <bits/stdc++.h>
const int maxn = 5e5 + 10;
const int mod = 1e9 + 7;
using namespace std;
template <typename T1, typename T2>
void ckmin(T1 &a, T2 b) {
  if (a > b) a = b;
}
template <typename T1, typename T2>
void ckmax(T1 &a, T2 b) {
  if (a < b) a = b;
}
int num[30], tot[5005][30];
char s[5005], t[5005];
void solve() {
  scanf("%s%s", s + 1, t + 1);
  for (int i = 1; s[i]; i++) {
    num[s[i] - 'a']++;
  }
  for (int i = 1; t[i]; i++) {
    for (int j = 0; j < 26; j++) tot[i][j] = tot[i - 1][j];
    tot[i][t[i] - 'a']++;
  }
  int len = strlen(t + 1);
  for (int i = len; i; i--) {
    int flag = 1, mx = -1;
    for (int j = 0; j < 26; j++) {
      if (num[j] > tot[i][j]) mx = max(mx, j);
      if (num[j] < tot[i][j]) flag = 0;
    }
    if (flag && (i != len && mx > t[i + 1] - 'a' || i == len && ~mx)) {
      for (int j = 1; j <= i; j++) putchar(t[j]), num[t[j] - 'a']--;
      if (i != len)
        for (int j = 0; j < 26; j++) {
          if (num[j] && j + 'a' > t[i + 1]) {
            putchar('a' + j);
            num[j]--;
            break;
          }
        }
      for (int j = 0; j < 26; j++)
        while (num[j]) putchar(j + 'a'), num[j]--;
      return;
    }
  }
  int flag = 0;
  for (int j = 0; j < 26; j++) {
    if (num[j] && j + 'a' > t[1]) {
      flag = 1;
      putchar(j + 'a');
      num[j]--;
      break;
    }
  }
  if (!flag) return printf("-1"), void();
  for (int j = 0; j < 26; j++)
    while (num[j]) putchar(j + 'a'), num[j]--;
}
int main() {
  solve();
  return 0;
}
