#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=1e5+10;
typedef long long ll;
int gi() {
    int x=0,o=1;char ch=getchar();
    while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
    if(ch=='-') o=-1,ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*o;
}
int n,m,a,b,s[N],dep[N],st[N],fa[N],top=0;
vector<int> E[N];
ll ans=0;
void dfs(int u,int ff,int val) {
    fa[u]=ff;dep[u]=dep[ff]+1;s[u]=val;
    for(int v:E[u]) {
        if(v==ff) continue;
        if(!dep[v]) dfs(v,u,-val),s[u]+=s[v];
        else a=u,b=v;
    }
}
int main() {
    cin>>n>>m;
    for(int i=1,u,v;i<=m;i++) u=gi(),v=gi(),E[u].pb(v),E[v].pb(u);
    dfs(1,0,1);
    if(dep[a]<dep[b]) swap(a,b);
    if(m==n-1) {
        if(s[1]) return puts("-1"),0;
        for(int i=1;i<=n;i++) ans+=abs(s[i]);
    }
    else if((dep[a]-dep[b])&1) {
        if(s[1]) return puts("-1"),0;
        for(int p=a;p!=b;p=fa[p]) st[++top]=s[p],dep[p]=-1;
        st[++top]=0;
        int mid=(top+1)>>1;nth_element(st+1,st+mid,st+top+1);
        for(int i=1;i<=n;i++) if(dep[i]!=-1) ans+=abs(s[i]);
        for(int i=1;i<=top;i++) ans+=abs(st[mid]-st[i]);
    }
    else {
        if(abs(s[1])&1) return puts("-1"),0;
        int z=s[1]/2;
        for(int p=a;p;p=fa[p]) s[p]-=z;
        for(int p=b;p;p=fa[p]) s[p]-=z;
        for(int i=1;i<=n;i++) ans+=abs(s[i]);
        ans+=abs(z);
    }
    printf("%lld\n",ans);
    return 0;
}
//orzgzy
//鸡贼明年进队超稳
