#include<bits/stdc++.h>
using namespace std;
const int N=1<<10;
int n,m,sum[2],a[N],c[N],b[N];
bool dp[N],f[N],g[N][N],ans;

void dfs(int u)
{
	sum[c[u]]++;
	for(int v=0;v<n;v++)if(g[u][v])
	{
		if(c[u]==c[v])ans=false;
		if(!~c[v])
		{
			c[v]=!c[u];
			dfs(v);
		}
	}
}

int main()
{
	scanf("%d%d",&n,&m);
	memset(g,true,sizeof(g));
	for(int i=0;i<n;i++)
	{
		g[i][i]=false;
	}
	for(int i=0;i<m;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		u--,v--;
		g[u][v]=g[v][u]=false;
	}
	memset(c,-1,sizeof(c));
	int fsn=0;
	ans=true;
	for(int u=0;u<n;u++)if(!~c[u])
	{
		//printf("u=%d\n",u);
		sum[0]=sum[1]=0;
		c[u]=0;
		dfs(u);
		a[fsn]=sum[0];
		b[fsn]=sum[1];
		fsn++;
	}
	if(!ans)
	{
		puts("-1");
		return 0;
	}
	memset(f,false,sizeof(f));
	f[0]=true;
	for(int i=0;i<fsn;i++)
	{
		memset(dp,false,sizeof(dp));
		for(int j=0;j<n;j++)if(f[j])
		{
			dp[j+a[i]]=dp[j+b[i]]=true;
		}
		swap(f,dp);
	}
	for(int i=n/2;;i--)if(f[i])
	{
		printf("%d\n",i*(i-1)/2+(n-i)*(n-i-1)/2);
		return 0;
	}
	assert(0);
}