#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int dirX[] = {0, -1, 0, 1, -1, 1, -1, 1};
int dirY[] = {-1, 0, 1, 0, 1, -1, -1, 1};
long long gcd(long long a, long long b) {
  if (!b) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return a * b / gcd(a, b); }
const long long MOD = 998244353;
const long long N = 1e3 + 7;
const long long llinf = INT64_MAX;
const int intinf = INT32_MAX;
int n, p;
string s;
bool findPalindrome(string s) {
  for (long long i = 1; i < s.size(); i++) {
    if (s[i] == s[i - 1]) return true;
  }
  for (long long i = 1; i < s.size() - 1; i++) {
    if (s[i - 1] == s[i + 1]) return true;
  }
  return false;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  cin >> n >> p;
  cin >> s;
  int i = n - 1;
  s[i]++;
  while (i < n && i >= 0) {
    if (s[i] - 'a' >= p)
      s[i--] = 'a', (i >= 0) ? s[i]++ : 0;
    else if (i >= 1 && s[i] == s[i - 1])
      s[i]++;
    else if (i >= 2 && s[i] == s[i - 2])
      s[i]++;
    else
      i++;
  }
  (i < 0) ? cout << "NO" : cout << s;
}
