#include<bits/stdc++.h>
using namespace std;
#define mid ((l+r)/2)
int n,m,jl,cnt=0,bel[100000]={0};
double l=0.0,r,ans,dist[1010][1010]={0};
struct node{int x,y;}ta[1000];
bool cmp(node a,node b){return a.x<b.x;}
int find (int x){if(bel[x]!=x)bel[x]=find(bel[x]);return bel[x];}
void join(int x,int y){bel[find(x)]=find(y);}
bool check(double dis){
for(int i=1;i<=m;i++)bel[i]=i;
for(int i=1;i<=m;i++)for(int j=1;j<=m;j++){
if(0.0001<dis-dist[i][j])join(i,j);
}if(find(1)!=find(m))return 0;return 1;
}
int main(){
cin>>n>>m;for(int i=1;i<=m;i++)cin>>ta[i].x>>ta[i].y;
sort(ta+1,ta+1+m,cmp);
l=ta[1].x;r=1000000.0;if(n-ta[m].x>l)l=n-ta[m].x;l*=1.0;
for(int i=1;i<=m;i++)for(int j=1;j<=m;j++){
if(i==j)continue;dist[i][j]=sqrt((ta[i].x-ta[j].x)*(ta[i].x-ta[j].x)+(ta[i].y-ta[j].y)*(ta[i].y-ta[j].y));
}
while(0.0001<r-l){if(check(mid*2)){r=mid;ans=r;} else l=mid;}
cout<<fixed<<setprecision(2)<<ans;
system("pause");
}