#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 10;
const int INF = 1 << 30;
const long long LINF = 1LL << 60;
template <typename T>
struct Pt {
  T x, y;
  Pt() {}
  Pt(T _x, T _y) : x(_x), y(_y) {}
  Pt(const Pt<T> &p) : x(p.x), y(p.y) {}
  Pt<T> operator+(const Pt<T> p) const { return Pt<T>(x + p.x, y + p.y); }
  Pt<T> operator-() const { return Pt<T>(-x, -y); }
  Pt<T> operator-(const Pt<T> p) const { return Pt<T>(x - p.x, y - p.y); }
  Pt<T> operator*(T t) const { return Pt<T>(x * t, y * t); }
  Pt<T> operator/(T t) const { return Pt<T>(x / t, y / t); }
  T dot(Pt<T> v) const { return x * v.x + y * v.y; }
  T cross(Pt<T> v) const { return x * v.y - y * v.x; }
  void read() { scanf("%lld%lld", &x, &y); }
  void print() { printf("(%lld,%lld)", x, y); }
};
Pt<long long> rs[MAX_N], bs[MAX_N];
int ps[MAX_N];
bool used[MAX_N];
bool cross_segs(Pt<long long> p0, Pt<long long> p1, Pt<long long> q0,
                Pt<long long> q1) {
  return (p1 - p0).cross(q0 - p0) * (p1 - p0).cross(q1 - p0) <= 0 &&
         (q1 - q0).cross(p0 - q0) * (q1 - q0).cross(p1 - q0) <= 0;
}
bool rec(int k, int n) {
  if (k >= n) return true;
  for (int i = 0; i < n; i++)
    if (!used[i]) {
      bool ok = true;
      for (int j = 0; ok && j < k; j++)
        ok = (!cross_segs(rs[j], bs[ps[j]], rs[k], bs[i]));
      if (ok) {
        used[i] = true;
        ps[k] = i;
        if (rec(k + 1, n)) return true;
        used[i] = false;
      }
    }
  return false;
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  if (n != m) {
    puts("No");
    return 0;
  }
  for (int i = 0; i < n; i++) rs[i].read();
  for (int i = 0; i < n; i++) bs[i].read();
  if (rec(0, n))
    puts("Yes");
  else
    puts("No");
  return 0;
}
