#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
using namespace std;
namespace BM{
	#define MAXN0 300
	#define MAXN1 300
	#define MAXM 24000
	int n0,n1,m,ptr[MAXN0],next[MAXM],zu[MAXM];
	int to[MAXN0],fr[MAXN1],us[MAXN1],ze;
	void init(int _n0,int _n1){
		n0=_n0;n1=_n1;m=0;memset(ptr,~0,n0*4);
	}
	void ae(int u,int  v){
		next[m]=ptr[u];ptr[u]=m;zu[m]=v;++m;
	}
	int augment(int u){
		int i,v;
		for(i=ptr[u];~i;i=next[i])if(us[v=zu[i]]!=ze){
			us[v]=ze;
			if(!~fr[v]||augment(fr[v])){to[u]=v;fr[v]=u;return 1;}
		}
		return 0;
	}
	int solve(){
		memset(to,~0,n0*4);memset(fr,~0,n1*4);memset(us,~0,n1*4);
		int ret=0;
		for(ze=0;ze<n0;++ze)ret+=augment(ze);
		return ret;
	}
}
using namespace BM;
int x[1000];
int y[1000];
int r[1000];
int X[1000];
int Y[1000];
int main(){
	int a,b;
	while(scanf("%d%d",&a,&b),a){
		for(int i=0;i<a;i++){
			scanf("%d%d%d",x+i,y+i,r+i);
		}
		for(int i=0;i<b;i++){
			scanf("%d%d",X+i,Y+i);
		}
		double left=0;
		double right=9999999;
		for(int i=0;i<100;i++){
			double M=(left+right)/2;
			init(a,b);
			for(int j=0;j<a;j++){
				for(int k=0;k<b;k++){
					if(M*r[j]>sqrt((x[j]-X[k])*(x[j]-X[k])+(y[j]-Y[k])*(y[j]-Y[k]))){
						ae(j,k);
					}
				}
			}
			if(solve()==b){
				right=M;
			}else left=M;
		}
		printf("%.10f\n",right);
	}
}