#include <bits/stdc++.h>
using namespace std;
int memo[1000 + 10][26 + 10][26 + 10][2];
int path[1000 + 10][26 + 10][26 + 10][2];
int N, P, arr[1000 + 10];
string a, ans;
int REC(int p, int be, int bee, int change) {
  if (p == a.size()) {
    if (change) return 1;
    return 0;
  }
  int res = 0;
  if (a[p] - 'a' + 1 != be && a[p] - 'a' + 1 != bee && !change)
    res = REC(p + 1, a[p] - 'a' + 1, be, change);
  if (res) {
    ans.push_back(a[p]);
    return 1;
  }
  if (change) {
    for (int i = 1; i <= P; i++) {
      if (p == 0)
        res = REC(p + 1, i, be, change);
      else if (p == 1 && i != be)
        res = REC(p + 1, i, be, change);
      else if (p >= 2 && i != be && i != bee)
        res = REC(p + 1, i, be, change);
      if (res) {
        ans.push_back((char)('a' + i - 1));
        return 1;
      }
    }
  } else {
    for (int i = arr[p] + 1; i <= P; i++) {
      if (p == 0)
        res = REC(p + 1, i, be, 1);
      else if (p == 1 && i != be)
        res = REC(p + 1, i, be, 1);
      else if (p >= 2 && i != be && i != bee)
        res = REC(p + 1, i, be, 1);
      if (res) {
        ans.push_back((char)('a' + i - 1));
        return 1;
      }
    }
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> N >> P >> a;
  for (int i = 0; i < a.size(); i++) arr[i] = a[i] - 'a' + 1;
  bool res = REC(0, 0, 0, 0);
  if (!res)
    cout << "NO" << endl;
  else {
    reverse((ans).begin(), (ans).end());
    cout << ans << endl;
  }
  return 0;
}
