#include<bits/stdc++.h>
using namespace std;
struct node
{
int nxt,to;
double val;
}e[1145141];
int head[1145141],cnt;
void add(int u,int v,double w)
{
e[++cnt].to=v;
e[cnt].val=w;
e[cnt].nxt=head[u];
head[u]=cnt;
}
double x[114514],y[114514];
double cale(int i,int j)
{
double dx=x[i]-x[j];
double dy=y[i]-y[j];
return sqrt(dx*dx+dy*dy);
}
int n,m;
int vis[1145141];
bool check(double mid)
{
queue<int>q;
q.push(0);
memset(vis,0,sizeof vis);
vis[0]=1;
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(!vis[v])
{
if(v==m+1||v==0)
{
if(e[i].val<=mid)
{
q.push(v);
vis[v]=1;
}
}
else if(e[i].val<=2*mid)
{
q.push(v);
vis[v]=1;
}
}
}
}
return vis[m+1];
}
double ans;
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x[i]>>y[i];
add(i,0,x[i]),add(0,i,x[i]);
add(i,m+1,n-x[i]),add(m+1,i,n-x[i]);
}
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
if(i!=j)
add(i,j,cale(i,j));
double l=0,r=1e4;
for(int i=1;i<=114*2;i++)
{
double mid=(l+r)/2;
// cout<<mid<<endl;
if(check(mid))
ans=mid,r=mid;
else
l=mid;
}
printf("%.2lf",ans);
}