#include <bits/stdc++.h>
using namespace std;
template <typename T, size_t N>
long long SIZE(const T (&t)[N]) {
  return N;
}
template <typename T>
long long SIZE(const T &t) {
  return t.size();
}
string to_string(const string s, long long x1 = 0, long long x2 = 1e9) {
  return '"' + ((x1 < s.size()) ? s.substr(x1, x2 - x1 + 1) : "") + '"';
}
string to_string(const char *s) { return to_string((string)s); }
string to_string(const bool b) { return (b ? "true" : "false"); }
string to_string(const char c) { return string({c}); }
template <size_t N>
string to_string(const bitset<N> &b, long long x1 = 0, long long x2 = 1e9) {
  string t = "";
  for (long long __iii__ = min(x1, SIZE(b)), __jjj__ = min(x2, SIZE(b) - 1);
       __iii__ <= __jjj__; ++__iii__) {
    t += b[__iii__] + '0';
  }
  return '"' + t + '"';
}
template <typename A, typename... C>
string to_string(const A(&v), long long x1 = 0, long long x2 = 1e9,
                 C... coords);
long long l_v_l_v_l = 0, t_a_b_s = 0;
template <typename A, typename B>
string to_string(const pair<A, B> &p) {
  l_v_l_v_l++;
  string res = "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
  l_v_l_v_l--;
  return res;
}
template <typename A, typename... C>
string to_string(const A(&v), long long x1, long long x2, C... coords) {
  long long rnk = rank<A>::value;
  string tab(t_a_b_s, ' ');
  string res = "";
  bool first = true;
  if (l_v_l_v_l == 0) res += '\n';
  res += tab + "[";
  x1 = min(x1, SIZE(v)), x2 = min(x2, SIZE(v));
  auto l = begin(v);
  advance(l, x1);
  auto r = l;
  advance(r, (x2 - x1) + (x2 < SIZE(v)));
  for (auto e = l; e != r; e = next(e)) {
    if (!first) {
      res += ", ";
    }
    first = false;
    l_v_l_v_l++;
    if (e != l) {
      if (rnk > 1) {
        res += '\n';
        t_a_b_s = l_v_l_v_l;
      };
    } else {
      t_a_b_s = 0;
    }
    res += to_string(*e, coords...);
    l_v_l_v_l--;
  }
  res += "]";
  if (l_v_l_v_l == 0) res += '\n';
  return res;
}
void dbgm() { ; }
template <typename Heads, typename... Tails>
void dbgm(Heads H, Tails... T) {
  cout << to_string(H) << " | ";
  dbgm(T...);
}
template <long long D, typename T>
struct Vec : public vector<Vec<D - 1, T>> {
  static_assert(D >= 1, "Vector dimension must be greater than zero!");
  template <typename... Args>
  Vec(long long n = 0, Args... args)
      : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
};
template <typename T>
struct Vec<1, T> : public vector<T> {
  Vec(long long n = 0, const T &val = T()) : vector<T>(n, val) {}
};
const long long lg = 21;
const long long mxn = 102;
const long long md = 998244353, nlg = 60;
long long sqr(long long a) { return a * a; }
long long msb(long long x) {
  for (long long i = nlg; i > -1; i--)
    if ((1LL << i) & x) return i;
  return -1;
}
long long lsb(long long x) {
  for (long long i = 0; i < nlg; i++)
    if ((1LL << i) & x) return i;
  return -1;
}
vector<long long> tovec(string a) {
  vector<long long> ans;
  for (char x : a) ans.push_back(((long long)x - 'a'));
  return ans;
}
string tostr(vector<long long> a) {
  string ans;
  for (long long x : a) ans += ((char)(x + 'a'));
  return ans;
}
long long n, k;
string a;
Vec<4, long long> mem(mxn, mxn, 2, 2, -1);
long long dp(long long li, long long i, long long exk, long long exc) {
  if (i == n) return (exk && exc == 0);
  if (-1 != mem[li + 1][i][exk][exc]) return mem[li + 1][i][exk][exc];
  bool ans = 0;
  if (a[i] != 'N') ans |= dp(i, i + 1, exk, exc);
  if (a[i] != 'Y')
    ans |= dp(li, i + 1, exk | (i - li == k), exc | (i - li > k));
  return mem[li + 1][i][exk][exc] = ans;
}
void solve() {
  cin >> n >> k;
  cin >> a;
  for (char x : a) {
    if (x == 'N' && k == 0) {
      cout << "NO";
      return;
    }
  }
  if (k == 0) {
    cout << "YES";
    return;
  }
  cout << (dp(-1, 0, 0, 0) ? "YES" : "NO");
  return;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(nullptr);
  long long t = 1;
  while (t--) {
    solve();
    cout << '\n';
  }
  return 0;
}
