implement FM index