#include <bits/stdc++.h>
using namespace std;
vector<int> v[100008];
vector<int> cir;
int pa[100008];
int siz[100008];
int dep[100008];
int n, m;
long long ans;
int c0, c1;
int vis[100008];
int tag[100008];
void dfs(int x, int p) {
  pa[x] = p;
  vis[x] = 1;
  for (int i = 0; i < v[x].size(); i++) {
    int y = v[x][i];
    if (y == p) continue;
    if (!vis[y])
      dfs(y, x);
    else if (!cir.size()) {
      int xx = x;
      while (xx != y) cir.push_back(xx), xx = pa[xx];
      cir.push_back(y);
    }
  }
}
void efs(int x) {
  siz[x] = tag[x];
  if (tag[x] < 0)
    c0++;
  else
    c1++;
  for (int i = 0; i < v[x].size(); i++) {
    int y = v[x][i];
    if (!tag[y]) tag[y] = -tag[x], efs(y), siz[x] += siz[y];
  }
}
void makeit(int x) {
  for (int i = 0; i < cir.size(); i++) {
    ans += abs(x);
    x = siz[cir[i]] - x;
    x = -x;
  }
  printf("%lld\n", ans);
}
int main() {
  tag[0] = 1;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    v[x].push_back(y);
    v[y].push_back(x);
  }
  if (m < n) {
    tag[1] = 1;
    efs(1);
    if (c0 != c1) return 0 * puts("-1");
    ;
    for (int i = 1; i <= n; i++) ans += abs(siz[i]);
    return 0 * printf("%lld\n", ans);
    ;
  } else {
    dfs(1, 0);
    memset(vis, 0, sizeof vis);
    int tot = 0;
    for (int i = 0; i < cir.size(); i++) tag[cir[i]] = (i % 2 == 0) * 2 - 1;
    for (int i = 0; i < cir.size(); i++)
      efs(cir[i]), tot += siz[cir[i]], ans -= abs(siz[cir[i]]);
    for (int i = 1; i <= n; i++) ans += abs(siz[i]);
    if (cir.size() % 2 == 1) {
      if (tot % 2) return 0 * puts("-1");
      ;
      makeit(tot / 2);
    } else {
      if (tot) return 0 * puts("-1");
      ;
      int x = 0, y = 1;
      vector<int> all;
      for (int i = 0; i < cir.size(); i++) {
        all.push_back(x * y);
        y = -y;
        x = siz[cir[i]] - x;
        x = -x;
      }
      sort(all.begin(), all.end());
      makeit(all[all.size() / 2]);
    }
  }
  return 0;
}
