#include <bits/stdc++.h>
using namespace std;
int r, b;
struct Point {
  int x;
  int y;
};
vector<Point> v, v2;
bool onSegment(Point p, Point q, Point r) {
  if (q.x <= max(p.x, r.x) && q.x >= min(p.x, r.x) && q.y <= max(p.y, r.y) &&
      q.y >= min(p.y, r.y))
    return true;
  return false;
}
int orientation(Point p, Point q, Point r) {
  int val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
  if (val == 0) return 0;
  return (val > 0) ? 1 : 2;
}
bool doIntersect(Point p1, Point q1, Point p2, Point q2) {
  int o1 = orientation(p1, q1, p2);
  int o2 = orientation(p1, q1, q2);
  int o3 = orientation(p2, q2, p1);
  int o4 = orientation(p2, q2, q1);
  if (o1 != o2 && o3 != o4) return true;
  if (o1 == 0 && onSegment(p1, p2, q1)) return true;
  if (o2 == 0 && onSegment(p1, q2, q1)) return true;
  if (o3 == 0 && onSegment(p2, p1, q2)) return true;
  if (o4 == 0 && onSegment(p2, q1, q2)) return true;
  return false;
}
int main() {
  std::ios::sync_with_stdio(false);
  int T;
  T = 1;
  while (T--) {
    int i, j, x, y;
    cin >> r >> b;
    for (i = 0; i < r; ++i) {
      cin >> x >> y;
      v.push_back({x, y});
    }
    for (i = 0; i < b; ++i) {
      cin >> x >> y;
      v2.push_back({x, y});
    }
    if (r != b) {
      cout << "No" << endl;
      return 0;
    }
    int ar[10];
    for (i = 0; i < r; ++i) ar[i] = i;
    do {
      vector<pair<int, int> > v3;
      for (i = 0; i < r; ++i) {
        v3.push_back({i, ar[i]});
      }
      for (i = 0; i < v3.size(); ++i) {
        for (j = i + 1; j < v3.size(); ++j)
          if (doIntersect(v[v3[i].first], v2[v3[i].second], v[v3[j].first],
                          v2[v3[j].second]))
            goto end;
      }
      cout << "Yes" << endl;
      return 0;
    end:;
    } while (next_permutation(ar, ar + r));
  }
  cout << "No" << endl;
  return 0;
}
