#include<bits/stdc++.h>
#define G if(++ip==ie)if(fread(ip=buf,1,SZ,stdin))
using namespace std;
const int SZ=1<<19,N=1e5+9,M=2*N;
char buf[SZ],*ie=buf+SZ,*ip=ie-1;
inline int in(){
    G;while(*ip<'-')G;
    int x=*ip&15;G;
    while(*ip>'-'){x*=10;x+=*ip&15;G;}
    return x;
}
int he[N],ne[M],to[M],f[N],a[N],b[N];
int Getf(int x){
    return x==f[x]?x:f[x]=Getf(f[x]);
}
void Dfs(int x,int op){
    a[x]=op;
    for(int y,i=he[x];i;i=ne[i])
        if((y=to[i])!=f[x])
            f[y]=x,Dfs(y,-op),a[x]+=a[y];
}
int main(){
    int n=in(),m=in(),rt=1,re=1,p=0,ans=0;
    for(int i=1;i<=n;++i)f[i]=i;
    for(int p=0,i=1;i<=m;++i){
        int x=in(),y=in();
        if(Getf(x)!=Getf(y))f[f[x]]=f[y];
        else{rt=x,re=y;continue;}
        ne[++p]=he[x];to[he[x]=p]=y;
        ne[++p]=he[y];to[he[y]=p]=x;
    }
    f[rt]=0;Dfs(rt,1);
    if(n==m)
    {

    p=0;
        for(int i=re;i;i=f[i]) b[++p]=a[i];
        if(p%2)
        {
            if(a[rt]%2)return puts("-1"),0;
            for(int i=re;i;i=f[i])a[i]-=a[rt]/2;
        }
        else
        {
            if(a[rt])return puts("-1"),0;
            sort(b+1,b+p+1);
            for(int i=re;i;i=f[i])a[i]-=b[p/2];
        }
    }
    else if(a[rt])return puts("-1"),0;
    for(int i=1;i<=n;++i)ans+=abs(a[i]);
    return cout<<ans,0;
}