#include <bits/stdc++.h>
using namespace std;
template <class ARG>
inline void put(ARG x) {
  cout << x << endl;
}
inline long long sqr(long long x) { return x * x; }
inline vector<long long> divisors(long long x) {
  vector<long long> divs = {1};
  for (long long i = (long long)(2); i < (long long)(x); ++i) {
    if (x % i == 0) divs.push_back(i);
  }
  return divs;
}
inline vector<pair<long long, long long>> divpairs(long long x) {
  vector<pair<long long, long long>> divs;
  for (long long i = (long long)(1); i < (long long)(x + 1); ++i) {
    if (x % i == 0) divs.push_back(make_pair(i, x / i));
  }
  return divs;
}
template <class Predicate>
inline long long bin_search(long long lb, long long ub, Predicate pred) {
  while (lb + 1 < ub) {
    long long mid = (lb + ub) / 2;
    if (pred(mid)) {
      ub = mid;
    } else {
      lb = mid;
    }
  }
  return pred(lb) ? lb : ub;
}
inline vector<long long> to_digits(long long i) {
  vector<long long> digits;
  while (i >= 10) {
    digits.push_back(i % 10);
    i /= 10;
  }
  digits.push_back(i);
  reverse(digits.begin(), digits.end());
  return digits;
}
template <class T>
using matrix = vector<vector<T>>;
template <class T>
matrix<T> make_matrix(long long R, long long C, T value) {
  return matrix<T>(R, vector<T>(C, value));
}
template <class T, class F>
inline vector<T> operator>>(vector<T> &v, F f) {
  return f(v);
}
template <class T, class S, class F>
inline vector<S> map(F f, const vector<T> &v) {
  vector<S> res(v.size());
  transform(v.begin(), v.end(), res.begin, f);
  return res;
}
template <class T, class F>
inline vector<T> filter(F f, const vector<T> &v) {
  vector<T> res;
  copy_if(v.begin(), v.end(), back_inserter(res), f);
  return res;
}
template <class T, class S, class F>
inline S fold(F f, S initial, const vector<T> &v) {
  return accumulate(v.begin(), v.end(), initial, f);
}
const long long MAXN = 1e6;
const long long MOD = 1e9 + 7;
const long long INF = LLONG_MAX / 2;
const double eps = numeric_limits<double>::min() * 10;
using address = pair<long long, long long>;
inline long long pow(long long i, long long n) {
  return (long long)pow(i + eps, n);
}
template <class T>
inline T &at(matrix<T> &m, address addr) {
  return m[addr.first][addr.second];
}
template <class T>
inline pair<T, T> operator+(pair<T, T> t1, pair<T, T> t2) {
  return make_pair(t1.first + t2.first, t1.second + t2.second);
}
template <class T>
inline pair<T, T> operator-(pair<T, T> t1, pair<T, T> t2) {
  return make_pair(t1.first - t2.first, t1.second - t2.second);
}
template <class T>
inline pair<T, T> operator*(pair<T, T> t1, pair<T, T> t2) {
  return make_pair(t1.first * t2.first, t1.second * t2.second);
}
template <class T>
inline pair<T, T> operator*(T t, pair<T, T> t2) {
  return make_pair(t + t2.first, t + t2.second);
}
signed main() {
  long long A, B;
  string S;
  cin >> A >> B >> S;
  if ((long long)S.length() != A + B + 1) {
    put("No");
    return 0;
  }
  for (long long i = (long long)(0); i < (long long)(A); ++i) {
    if (!isdigit(S[i])) {
      put("No");
      return 0;
    }
  }
  if (S[A] != '-') {
    put("No");
    return 0;
  }
  for (long long i = (long long)(A + 1); i < (long long)(B); ++i) {
    if (!isdigit(S[i])) {
      put("No");
      return 0;
    }
  }
  put("Yes");
  return 0;
}
