#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-12;
struct Point {
  double x, y;
  Point(double x = 0, double y = 0) : x(x), y(y) {}
};
Point operator-(Point A, Point B) { return Point(A.x - B.x, A.y - B.y); }
double Cross(Point A, Point B) { return A.x * B.y - A.y * B.x; }
int dcmp(double x) {
  if (fabs(x) < EPS)
    return 0;
  else
    return x < 0 ? -1 : 1;
}
bool SegmentProperIntersection(Point a1, Point a2, Point b1, Point b2) {
  double c1 = Cross(a2 - a1, b1 - a1), c2 = Cross(a2 - a1, b2 - a1);
  double c3 = Cross(b2 - b1, a1 - b1), c4 = Cross(b2 - b1, a2 - b1);
  return dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0;
}
int n, m, ok;
vector<Point> ship, base;
vector<int> v;
bool vst[20];
bool bxj() {
  for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
      if (SegmentProperIntersection(ship[i], base[v[i]], ship[j], base[v[j]])) {
        return 0;
      }
    }
  }
  return 1;
}
void dfs() {
  if (v.size() == n) {
    if (bxj()) {
      ok = 1;
      return;
    }
  }
  for (int i = 0; i < n && !ok; ++i) {
    if (vst[i]) continue;
    vst[i] = 1;
    v.push_back(i);
    dfs();
    vst[i] = 0;
    v.pop_back();
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; ++i) {
    Point tmp;
    scanf("%lf%lf", &tmp.x, &tmp.y);
    ship.push_back(tmp);
  }
  for (int i = 0; i < m; ++i) {
    Point tmp;
    scanf("%lf%lf", &tmp.x, &tmp.y);
    base.push_back(tmp);
  }
  if (n != m) {
    printf("No\n");
    return 0;
  }
  for (int i = 0; i < n && !ok; ++i) {
    vst[i] = 1;
    v.push_back(i);
    dfs();
    v.pop_back();
    vst[i] = 0;
  }
  if (ok)
    printf("Yes\n");
  else
    printf("No\n");
  return 0;
}
