function(m=5,n=5,comb.lim=50000,Nsim=50000,PDF=F){
if(PDF==T) pdf(file=paste("KSapproxm",m,"n",n,".pdf",sep=""),width=11)
N=m+n
   cNm=choose(N,m)
par(mfrow=c(1,2))
if(m==n){ # compute by Gnedenko-Korolyuk formula
   a=1:n
   pd = NULL
   denom=choose(2*n,n)
   for(ai in a){
      temp=0
      i=1
      lower=n-ai
      while(lower>=0){
         temp=temp-((-1)^i)*choose(2*n,lower)
         i=i+1
         lower = n-i*ai
      }
      pd[ai]=2*temp/denom

   }
d=c(0,a)/n
pd=c(1,pd)
}else{
   cNm=choose(N,m)
   if(cNm>comb.lim){
      out=NULL
      for(i in 1:Nsim){
         x=sample(1:N,n)
         out[i]=ks.statistic.int(x,N)
      }
   }else{
      out=combn(1:N,n,FUN=ks.statistic.int,N=N)
   }
   out.u=sort(unique(out))
   pd=NULL
   dvec=NULL
   i=0
   for(d in out.u){
      i=i+1
      dvec[i]=d
      pd[i]=mean(out>=d)
   }
   d=c(0,dvec)
   pd=c(1,pd)
}
d.length=length(d)
pd.appr=NULL
pd.appr[1]=1
for(i in 2:length(d)){
   pd.appr[i]=KS.Kfun(sqrt(m*n/N)*d[i])[[1]][1]
}
plot.stepfun(stepfun(d,c(1,pd)),main="",
   ylab=expression(P(D[list(m,n)]>=d)),xlab="d")
out.step=stepfun(d,c(1,pd.appr))
plot(out.step,add=T,cex=.7,col.hor="blue",col.vert="blue",pch=16)
text(max(d),1,paste("m = ",m," ,  n =",n),adj=1)

sel=(pd<=.2  & pd >=1e-6)
#mpd=min(pd[sel],pd.appr[sel])
#Mpd=max(pd[sel],pd.appr[sel])
mpd=1e-6
Mpd=.2
xlabel=expression("exact "~P(D[list(m,n)]>=d))
if( m!=n & cNm>comb.lim){
xlabel=expression("simulated "~P(D[list(m,n)]>=d))
}
plot(pd[sel],pd.appr[sel],log="xy",xlim=c(mpd,Mpd),ylim=c(mpd,Mpd),
xlab=xlabel,
ylab=expression("approximate "~P(D[list(m,n)]>=d)))
if( m!=n & cNm>comb.lim){
text(Mpd,mpd,substitute(N[sim]==Nsimx,list(Nsimx=Nsim)),adj=1)
}
abline(0,1)
if(PDF==T) dev.off()
list(d=d,pd=pd,pd.appr=pd.appr)
}
