#include <bits/stdc++.h>
using namespace std;
const long long linf = 1LL << 62;
const int iinf = 1 << 30;
const double dinf = 1e17;
const int Mod = 1e9 + 9;
const int maxn = 1000005;
struct Point {
  long long x, y;
  Point(long long x = 0, long long y = 0) : x(x), y(y) {}
  Point operator-(const Point &a) const { return Point(x - a.x, y - a.y); }
  bool operator==(const Point &a) const { return x == a.x && y == a.y; }
  void read() { scanf("%lld%lld", &x, &y); }
};
long long Cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
long long Dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
Point p[20], q[20];
int n, m;
int a[20];
void C(long long &c) {
  if (c > 0)
    c = 1;
  else if (c < 0)
    c = -1;
}
bool onsg(Point p1, Point a1, Point a2) {
  return Cross(a1 - p1, a2 - p1) == 0 && Dot(a1 - p1, a2 - p1) < 0;
}
bool Ins(Point a1, Point a2, Point b1, Point b2) {
  if (a1 == b1 || a1 == b2 || a2 == b1 || a2 == b2) return 1;
  if (onsg(a1, b1, b2) || onsg(a2, b1, b2) || onsg(b1, a1, a2) ||
      onsg(b2, a1, a2))
    return 1;
  long long c1 = Cross(a2 - a1, b1 - a1), c2 = Cross(a2 - a1, b2 - a1);
  long long c3 = Cross(b2 - b1, a1 - b1), c4 = Cross(b2 - b1, a2 - b1);
  C(c1);
  C(c2);
  C(c3);
  C(c4);
  return c1 * c2 < 0 && c3 * c4 < 0;
}
bool chk() {
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      if (Ins(p[i], q[a[i]], p[j], q[a[j]])) return 0;
    }
  }
  return 1;
}
void solve() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) p[i].read();
  for (int i = 1; i <= m; i++) q[i].read();
  for (int i = 1; i <= n; i++) a[i] = i;
  if (n != m) {
    cout << "No" << endl;
    return;
  }
  int mk = 0;
  do {
    if (chk()) mk = 1;
    if (mk) break;
  } while (next_permutation(a + 1, a + 1 + n));
  if (mk)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
}
int main() {
  int t = 1;
  while (t--) solve();
  return 0;
}
