#include <bits/stdc++.h>
using namespace std;
int dep[100005], d[100005], t[100005], u;
pair<int, int> st[100005];
vector<pair<int, int>> q[400005];
map<int, int> last[100005];
int findt(int x, int &w) {
  for (w = 0; t[x]; x = t[x]) w = w ^ d[x];
  return x;
}
int onion(int x, int y) {
  int d1, d2;
  if (dep[x] < dep[y]) swap(x, y);
  x = findt(x, d1);
  y = findt(y, d2);
  if (x == y) return d1 ^ d2;
  st[++u] = make_pair(y, dep[x]);
  t[y] = x;
  d[y] = d1 ^ d2 ^ 1;
  dep[x] = dep[x] + (dep[x] == dep[y]);
  return 1;
}
void update(int i, int l, int r, int x, int y, pair<int, int> val) {
  if (x <= l && r <= y) {
    q[i].push_back(val);
    return;
  }
  int mij = (l + r) / 2;
  if (x <= mij) update(2 * i, l, mij, x, y, val);
  if (mij + 1 <= y) update(2 * i + 1, mij + 1, r, x, y, val);
}
void del(int x) {
  for (; u > x; u--) dep[t[st[u].first]] = st[u].second, t[st[u].first] = 0;
}
void solve(int i, int l, int r) {
  int cur = u;
  for (auto it : q[i])
    if (!onion(it.first, it.second)) {
      del(cur);
      for (i = l; i <= r; i++) printf("NO\n");
      return;
    }
  if (l == r) {
    printf("YES\n");
    del(cur);
    return;
  }
  int mij = (l + r) / 2;
  solve(i * 2, l, mij);
  solve(i * 2 + 1, mij + 1, r);
  del(cur);
}
int main() {
  int n, m, i, x, y;
  scanf("%d%d", &n, &m);
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    if (x > y) swap(x, y);
    if (last[x].count(y))
      update(1, 1, m, last[x][y], i - 1, make_pair(x, y)), last[x].erase(y);
    else
      last[x][y] = i;
  }
  for (i = 1; i <= n; i++)
    for (auto it : last[i])
      update(1, 1, m, it.second, m, make_pair(i, it.first));
  solve(1, 1, m);
  return 0;
}
