#include <bits/stdc++.h>
using namespace std;
bool isPrime(int n) {
  if (n <= 1) return false;
  if (n <= 3) return true;
  if (n % 2 == 0 || n % 3 == 0) return false;
  for (int i = 5; i * i <= n; i = i + 6) {
    if (n % i == 0 || n % (i + 2) == 0) return false;
  }
  return true;
}
long long count(long long n) {
  long long k = n, s = 0;
  while (k > 0) {
    s += k % 10;
    k /= 10;
  }
  return s;
}
long long div(long long n) {
  for (long long i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      return n / i;
    }
  }
}
long long d, x, y;
void extendedEuclid(long long A, long long B) {
  if (B == 0) {
    d = A;
    x = 1;
    y = 0;
  } else {
    extendedEuclid(B, A % B);
    int temp = x;
    x = y;
    y = temp - (A / B) * y;
  }
}
int main() {
  long long n, p, i;
  cin >> n >> p;
  string s;
  cin >> s;
  long long q = p + 96;
  char a = char(q);
  long long fl = 0;
  for (i = n - 1; i >= 0; i--) {
    char c = s[i];
    c++;
    while (c <= a) {
      if (c == s[i - 1]) {
        c++;
      } else if (i > 1 && c == s[i - 2]) {
        c++;
      } else {
        string y = s.substr(0, i);
        y += c;
        fl = 1;
        s = y;
        break;
      }
    }
    if (fl == 1) break;
    c++;
  }
  if (fl == 0) {
    cout << "NO";
    return 0;
  }
  long long x = s.size();
  char temp = 'a', ans;
  long long w = 0;
  while (temp <= a) {
    if (x > 0 && s[x - 1] == temp) {
      temp++;
    } else if (x > 1 && s[x - 2] == temp) {
      temp++;
    } else {
      w = 1;
      ans = temp;
      break;
    }
  }
  if (w == 0) {
    cout << -1;
    return 0;
  }
  if (s.size() < n) s += ans;
  while (s.size() < n) {
    map<char, long long> fr;
    fr[s[s.size() - 1]] = 1;
    fr[s[s.size() - 2]] = 1;
    if (fr['a'] == 0) {
      s += 'a';
    } else if (fr['b'] == 0)
      s += 'b';
    else
      s += 'c';
  }
  cout << s;
}
