#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const int maxn=100000+10;
int h[maxn],go[maxn*2],nxt[maxn*2],fa[maxn],co[maxn],kk[maxn],bb[maxn],sta[maxn];
vector<int>G[maxn]; 
bool bz[maxn];
int i,j,k,l,t,n,m,u,v,a,b,x,tot,top,num;
ll ans;
bool czy,gjx;
void add(int x,int y){
    go[++tot]=y;
    nxt[tot]=h[x];
    h[x]=tot;
}
int getfa(int x){
    if (!fa[x]) return x;
    int t=getfa(fa[x]);
    co[x]=co[x]^co[fa[x]];
    return fa[x]=t;
}
void travel(int x,int y){
    bz[x]=1;
    int t=h[x];
    for(int i=0;i<(int)G[x].size();i++){
    	go[t]=xx;
        if (go[t]!=y){
            if (bz[go[t]]){
                u=x;v=go[t];
                if (co[u]==co[v]) gjx=1;
            }
            else{
                co[go[t]]=co[x]^1;
                travel(go[t],x);
            }
        }
        t=nxt[t];
    }
}
void dfs(int x,int y){
    int t=h[x];
    for(int i=0;i<(int)G[x].size();i++){
    	go[t]=xx;
        if (go[t]!=y&&!(x==u&&go[t]==v||x==v&&go[t]==u)){
            dfs(go[t],x);
            kk[x]+=kk[go[t]];
            bb[x]+=bb[go[t]];
        }
        t=nxt[t];
    }
}
int main(){
    scanf("%d%d",&n,&m);
    fo(i,1,m){
        scanf("%d%d",&j,&k);
        G[j].push_back(k);
        G[k].push_back(j);
        /*a=getfa(j);b=getfa(k);
        if (a!=b){
            add(j,k);add(k,j);
            fa[a]=b;
            co[a]=co[j]^co[k]^1;
        }
        else{
            u=j;v=k;
            if (co[j]==co[k]) gjx=1;
        }*/
    }
    //fo(i,1,n) getfa(i);
    /*if (!co[1])
        fo(i,1,n) co[i]^=1;*/
    co[1]=1;
    travel(1,0);
    fo(i,1,n) 
        if (co[i]) bb[i]=1;else bb[i]=-1;
    fo(i,1,n) num+=bb[i];
    if (m==n-1){
        if (num){
            printf("-1\n");
            return 0;
        }
    }
    else{
        if (gjx){
            if (num%2==1){
                printf("-1\n");
                return 0;
            }
            bb[u]-=num/2;bb[v]-=num/2;
            ans+=(ll)abs(num/2);
        }
        else{
            if (num){
                printf("-1\n");
                return 0;
            }
            kk[u]=1;kk[v]=-1;
        }
    }
    dfs(1,0);
    fo(i,1,n)
        if (!kk[i]) ans+=(ll)abs(bb[i]);
        else{
            if (kk[i]) bb[i]=-bb[i];
            sta[++top]=bb[i];
        }
    sta[++top]=0;
    sort(sta+1,sta+top+1);
    x=sta[(top+1)/2];
    fo(i,1,top) ans+=(ll)abs(sta[i]-x);
    printf("%lld\n",ans);
}